在heroku中续集迁移

Posted

技术标签:

【中文标题】在heroku中续集迁移【英文标题】:sequelize migrations in heroku 【发布时间】:2014-05-03 05:44:20 【问题描述】:

谁能给我一些完整的nodejs迁移续集示例,因为实际文档本身并没有给出如何完成的完整示例。

或者可以给出一些其他可以使用的模块的完整示例以及如何在heroku中使用的最佳实践?

谢谢

【问题讨论】:

【参考方案1】:

当你通过运行在本地初始化 sequelize 时:

sequelize -i

会创建一个迁移文件夹、配置文件夹和配置文件夹内的 config.json。该 json 文件是您设置应用程序环境的位置。这是一个 config.json 文件的示例。


  "development": 
  "username": "postgres",
  "password": "password",
  "database": "dbname",
  "host": "100.0.0.0",
  "dialect":"postgres",
  "protocol":"postgres",
  "port":"xxxx"
 ,
  "staging": 
  "username": "dbusername",
  "password": "dbpassword",
  "database": "db",
  "host": "host",
  "dialect":"postgres",
  "protocol":"postgres",
  "port":"xxxx"
  ,
  "production": 
  "username": "dbusername",
  "password": "dbpassword",
  "database": "db",
  "host": "dbhost",
  "dialect":"postgres",
  "protocol":"postgres",
  "port":"xxxx"
  

生产对象是您设置 heroku 生产应用程序数据库变量的地方。您可以通过在命令行中运行以下命令来访问它们:

heroku config --app production-app-name

所有变量都将在您设置的 database_url 配置变量中。

当您准备好运行迁移时,您在命令行中运行的只是:

heroku run sequelize db:migrate --env production -m --app production-app-name. 

--env 将是您要迁移的 config.json 中的任何数据库对象。

使用这个方便的续集功能,而不是在文件中嵌入密码:

"production": 
  "use_env_variable": "DATABASE_URL"

【讨论】:

谢谢。不过,迁移中不需要 -m。 执行此操作时出现 SSL 错误,请问在哪里添加 ssl=true 选项? 不幸的是,这意味着您每次使用新迁移部署更改时都必须运行该命令。【参考方案2】:

Since March 2019, Heroku 在每次部署后运行构建 npm 脚本。改进上面令人惊叹的评论,您可以向它添加 sequelize 迁移(位于 package.json 文件中,位于根目录中):

...
"scripts": 
  ...
  "build": "sequelize db:migrate --env production && <other stuff to do before run the app>"

...

【讨论】:

它对我不起作用:(【参考方案3】:

您可以使用 Procfile 并将其放在顶部。

release: npx sequelize-cli db:migrate

然后您将需要一个 .sequelizerc 文件来定义您的迁移位置。

对于配置,您可以将其用于 ssl。

production: 
 use_env_variable: 'DATABASE_URL',
 dialect: 'postgres',
 protocol: 'postgres',
 ssl: true,
 dialectOptions: 
   ssl: 
    require: true,
    rejectUnauthorized: false,
   ,
 ,

【讨论】:

以上是关于在heroku中续集迁移的主要内容,如果未能解决你的问题,请参考以下文章

如何使用续集迁移/种子插入初始数据?

续集迁移未运行

续集数据库迁移问题[重复]

将迁移更改列续集为 FK,然后撤消失败

有条件地续集allownull约束

数据库迁移(分享十一续集)