如何通过 Heroku 运行 在不同的数据库服务器上进行迁移?

How to run migrations on a different database server through Heroku?

我们需要在 database.yml 文件中添加数据库的凭据,在不同的环境下,如 remote_database:

remote_database:
  adapter:
  encoding:
  username:
  ...

添加所有这些后,运行从本地终端执行以下命令即可完成工作:

RAILS_ENV=remote_database rails db:migrate

我正试图在 Heroku 上完成同样的事情。我已将更改推送到 config/database.yml,我正在尝试执行以下命令:

RAILS_ENV=remote_database heroku run rake db:migrate
# or
heroku run rake db:migrate RAILS_ENV=remote_database

似乎 Heroku 完全忽略了 RAILS_ENVconfig/database.yml 文件中 remote_database env 的设置。 Heroku 总是在与其连接的常规数据库服务器中进行更改,这些更改可以在 DATABASE_URL.

中找到

有没有办法通过 Heroku 运行 在不同的数据库服务器上进行迁移?

Heroku 注入 database.yml 并在 4.1 版本下用 Rails 完全覆盖它或部分覆盖它并允许我们防止从 Rails 4.1 覆盖。查看 Heroku article

上关于 Rails 数据库连接行为的完整解释

所以,在你的情况下

  • 如果您使用的是 Rails 4.1+:您可以尝试将 url 键添加到 database.yml 中,如 Active Record 4.1+ Escape Valve 上面的部分 link.
  • 如果您在 4.1 版本下使用 Rails:通过初始化程序覆盖数据库连接。请参阅 Heroku article("Otherwise if you are using an older version of Rails you will need to use an initializer" 部分)