Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Heroku上的Rails控制台内切换数据库?_Ruby On Rails_Heroku_Activerecord_Sidekiq - Fatal编程技术网

Ruby on rails 如何在Heroku上的Rails控制台内切换数据库?

Ruby on rails 如何在Heroku上的Rails控制台内切换数据库?,ruby-on-rails,heroku,activerecord,sidekiq,Ruby On Rails,Heroku,Activerecord,Sidekiq,我正在尝试将用户从一个系统迁移到另一个系统。每个系统都有自己的数据库和不同的类 我的计划是连接到一个数据库,通过SQL命令从一个数据库读取一些信息: ActiveRecord::Base.connection.execute(sql_command) OtherDB.connection.execute("select count(*) from users") 对数据做一些处理,然后使用普通模型在新数据库上写入一些结果 我计划在Sidekiq内部完成这项工作,但我正在尝试在Heroku上使

我正在尝试将用户从一个系统迁移到另一个系统。每个系统都有自己的数据库和不同的类

我的计划是连接到一个数据库,通过SQL命令从一个数据库读取一些信息:

ActiveRecord::Base.connection.execute(sql_command)
OtherDB.connection.execute("select count(*) from users")
对数据做一些处理,然后使用普通模型在新数据库上写入一些结果

我计划在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控制台时,如何在运行时切换数据库?

为什么尝试在运行时切换数据库?为什么不让两者同时连接,并在模型级别指定它们从哪个数据库读/写?Rails支持连接多个数据库,并在单个模型中指定要使用的数据库连接:

为什么尝试在运行时切换数据库?为什么不让两者同时连接,并在模型级别指定它们从哪个数据库读/写?Rails支持连接多个数据库并在单个模型中指定要使用的数据库连接:

问题在于使用url:不起作用,需要指定所有参数

config = {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>10, "username"=>"u...", "password"=>"p...", "port"=>5432, "database"=>"d...", "host"=>"ec2..."}
如果您选择3层数据库yml,则可以使用:

config = ActiveRecord::Base.configurations["production"]["seconddb"]
然后,您可以使用建立连接

当我开始指定用户名、密码、端口、数据库和主机时,一切都很顺利

要同时使用两个数据库,一个好方法是创建一个类

class OtherDB < ActiveRecord::Base
  establish_connection(ActiveRecord::Base.configurations["production"]["seconddb"])
end
参考号

要运行SQL命令,请执行以下操作:

ActiveRecord::Base.connection.execute(sql_command)
OtherDB.connection.execute("select count(*) from users")

问题是使用url:不起作用,需要指定所有参数

config = {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>10, "username"=>"u...", "password"=>"p...", "port"=>5432, "database"=>"d...", "host"=>"ec2..."}
如果您选择3层数据库yml,则可以使用:

config = ActiveRecord::Base.configurations["production"]["seconddb"]
然后,您可以使用建立连接

当我开始指定用户名、密码、端口、数据库和主机时,一切都很顺利

要同时使用两个数据库,一个好方法是创建一个类

class OtherDB < ActiveRecord::Base
  establish_connection(ActiveRecord::Base.configurations["production"]["seconddb"])
end
参考号

要运行SQL命令,请执行以下操作:

ActiveRecord::Base.connection.execute(sql_command)
OtherDB.connection.execute("select count(*) from users")

你试过@jvergeldeos的答案吗?1.使用rails可以设置多个数据库。按照活动记录说明进行操作。2.确保已将旧数据库附加到heroku应用程序。它应该有另一个标记名称作为数据库URL。Heroku会在附加时自动执行此操作。连接后,您的应用程序能够建立连接。@SimonFranzen谢谢,已从2层更改为3层,并在此处指定了第二个数据库链接,但不知道如何对第二个数据库运行查询。另外,我不确定你所说的将旧数据库附加到应用程序是什么意思。您的意思是在database.yml中指定它吗?第二个数据库被另一个应用程序使用。在heroku中,您可以将类似DBs的资源从一个应用程序连接到另一个应用程序。这仅仅意味着,数据库可以在heroku上的两个应用程序或多个应用程序中访问。您可以使用活动记录访问其他数据库。您可以在模型中定义它应该使用的数据库。或者您编写原始SQL语句,在这里您可以看到如何切换dbs->您是否尝试过@jvergeldios的答案?1.使用rails可以设置多个数据库。按照活动记录说明进行操作。2.确保已将旧数据库附加到heroku应用程序。它应该有另一个标记名称作为数据库URL。Heroku会在附加时自动执行此操作。连接后,您的应用程序能够建立连接。@SimonFranzen谢谢,已从2层更改为3层,并在此处指定了第二个数据库链接,但不知道如何对第二个数据库运行查询。另外,我不确定你所说的将旧数据库附加到应用程序是什么意思。您的意思是在database.yml中指定它吗?第二个数据库被另一个应用程序使用。在heroku中,您可以将类似DBs的资源从一个应用程序连接到另一个应用程序。这仅仅意味着,数据库可以在heroku上的两个应用程序或多个应用程序中访问。您可以使用活动记录访问其他数据库。您可以在模型中定义它应该使用的数据库。或者您编写原始SQL语句,在这里您可以看到如何切换dbs->我不确定这在Heroku上是否有效,但我会尝试一下。文档是针对edge的,我在Rails 5.2上运行,ActiveRecord::Base:类的“connected_to”不存在。那么,如何对第二个数据库运行SQL查询?我从2层改为3层。校准第二个数据库:legacy@Jeremy多数据库支持是Rails的新功能,它是Rails 6最好的新功能之一。我不确定这在Heroku上是否有效,但我会尝试一下。医生是
对于edge,我在Rails 5.2上运行,ActiveRecord::Base:类的“connected_to”不存在。那么,如何对第二个数据库运行SQL查询?我从2层改为3层。校准第二个数据库:legacy@Jeremy多数据库支持是Rails的新功能,它是Rails6最好的新功能之一。