【问题标题】:Update and or fix the schema of an AppFog Database更新和/或修复 AppFog 数据库的架构
【发布时间】:2013-04-23 01:50:13
【问题描述】:

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

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

日志:

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

【问题讨论】:

    标签: javascript node.js express appfog


    【解决方案1】:

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

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

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

    1. af tunnel [service-name]
    2. 选择您需要的连接选项。选项“无”将输出可与您最喜欢的数据库工具一起使用的凭据。设置到 localhost 端口 10000 的数据库连接,并使用提供的数据库名称、用户名和密码。选项“mysql”将使用 mysql cli 自动连接到数据库。关闭终端窗口或退出 af tunnel 命令将删除本地隧道,因此在进行更改时保持其运行。 More on af tunnel here
    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();
    }
    

    【讨论】:

    • 实际上,我将 Sequelize 用于我的数据库。不过谢谢你的建议,我用“af tunnel”命令更新了我的AppFog数据库,但是很无聊,需要很长时间......
    猜你喜欢
    • 2010-10-07
    • 2021-09-14
    • 2017-12-16
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多