1

我使用 ExpressJS 在 NodeJS 中创建了一个应用程序,我在 AppFog 上托管了我的应用程序并且它可以工作,但是,我对我的本地版本进行了一些更新,现在我想在 AppFog 上更新我的应用程序但我遇到了一个问题,因为我在本地更新了我的模型,现在,我无法更新我的 AppFog 数据库......

我该怎么办?删除应用程序并再次更新?我将丢失数据库中的所有数据...

日志:

Error: ER_BAD_FIELD_ERROR: Unknown column 'tags' in 'field list'
4

1 回答 1

2

首先导出数据库以保留备份,以防万一这没有按预期进行。

  1. af apps获取应用程序的数据库服务名称
  2. af export-service [service-name]获取备份的下载 url

接下来将服务隧道传输到您的本地盒子。请注意,这可能有点挑剔,因此如果需要,请尝试几次。

  1. af tunnel [service-name]
  2. 选择您需要的连接选项。选项“无”将输出可与您最喜欢的数据库工具一起使用的凭据。设置一个到localhost端口10000的数据库连接,并使用提供的数据库名称、用户名和密码。选项“mysql”将使用 mysql cli 自动连接到数据库。关闭终端窗口或退出 af tunnel 命令将删除本地隧道,因此在进行更改时保持其运行。更多关于 af 隧道的信息
1: none <- this will let you connect using sequel pro
2: mysql <- to make manual tweeks
3: mysqldump

最后根据需要修复数据库结构以使您的应用程序正常工作,然后更新应用程序。


此外,将来您可能会使用像Sequelize这样的 ORM ,它具有非破坏性的数据库迁移,可以在应用程序启动后运行af update

在您的启动文件的早期位置:

// Sudo code. see af online docs on how to get the bound service creds
if (process.env.NODE_ENV == "production") {
  var sequelize = new Sequelize(appfog.dbname, appfog.username, appfog.password, ...)

  var migratorOptions = { path: process.cwd() + '/migrations' };
  var migrator        = sequelize.getMigrator(migratorOptions);
  migrator.migrate();
}
于 2013-04-23T17:09:32.573 回答