【发布时间】:2020-03-08 07:48:51
【问题描述】:
我正在尝试将用户从一个系统迁移到另一个系统。每个系统都有自己的数据库和不同的类。
我的计划是连接一个数据库,通过 SQL 命令从一个数据库中读取一些信息:
ActiveRecord::Base.connection.execute(sql_command)
对数据做一些事情,然后使用普通模型将一些结果写入新数据库。
我计划在 Sidekiq 工作中执行此操作,但我正在尝试使用 Heroku 上的 Rails 控制台进行一些测试。
这应该很简单,但事实证明这非常困难。
当我在 Heroku 上启动 Rails 控制台时。我正在连接到 DATABASE_URL,这没问题,但是当我尝试连接到旧数据库并执行命令时,如下所示:
ActiveRecord::Base.establish_connection(adapter: "postgresql", encoding: "unicode", pool: 10, url: "postgres://...info...")
ActiveRecord::Base.connection.execute("select count(*) from users")
我最终得到:
PG::ConnectionBad (could not connect to server: No such file or directory)
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
但是,我可以通过在 heroku 上使用 DATABASE_URL 作为 env 变量启动我的 rails 控制台来连接到这个旧数据库:
$ heroku run 'DATABASE_URL=postgres://...info... rails console' -a console' -a app
但是我不知道如何切换回我的新数据库以便更新内容。
在heroku上使用rails控制台时如何在运行时切换数据库?
【问题讨论】:
-
你试过@jvergeldedios 的答案吗? 1. 使用rails可以设置多个数据库。按照活动记录说明进行操作。 2. 确保您已将旧数据库附加到您的 heroku 应用程序。它应该有另一个标记名称为 DATABASE_URL。 Heroku 在您附加它时会自动执行此操作。附加后,您的应用能够建立连接。
-
@SimonFranzen 谢谢,从 2 层更改为 3 层并在此处指定第二个数据库链接,但不知道如何对第二个数据库运行查询。另外,我不确定您所说的“将旧数据库附加到应用程序”是什么意思。你的意思是在database.yml中指定它吗?第二个数据库被另一个应用程序使用。
-
您可以在 heroku 中将资源(如数据库)从一个应用程序附加到另一个应用程序。只是意味着,数据库可以在 Heroku 上的两个应用程序或多个应用程序中访问。您可以访问具有活动记录的其他数据库。您可以在模型中定义它应该使用哪个数据库。或者您编写原始 SQL 语句,在这里您可以看到如何切换 dbs -> guides.rubyonrails.org/…
标签: ruby-on-rails heroku activerecord sidekiq