Ruby on rails 不同型号的数据库连接取决于环境
我有一个模型MessageImporter,它使用self.build\u connection连接到与其他模型不同的数据库。当我通过硬编码的连接信息时,一切正常。现在,我需要连接以依赖于当前环境。所以我把这些信息添加到我的应用程序中,这是一个简单漂亮的配置。我被困在如何将连接信息传递给self.building\u connection 以下是我当前的代码:Ruby on rails 不同型号的数据库连接取决于环境,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个模型MessageImporter,它使用self.build\u connection连接到与其他模型不同的数据库。当我通过硬编码的连接信息时,一切正常。现在,我需要连接以依赖于当前环境。所以我把这些信息添加到我的应用程序中,这是一个简单漂亮的配置。我被困在如何将连接信息传递给self.building\u connection 以下是我当前的代码: class MessageImporter < ActiveRecord::Base self.establish_conne
class MessageImporter < ActiveRecord::Base
self.establish_connection lambda {{
:adapter => APP_CONFIG[:external_messages][:adapter],
:host => APP_CONFIG[:external_messages][:host],
:database => APP_CONFIG[:external_messages][:database],
:username => APP_CONFIG[:external_messages][:username],
:password => APP_CONFIG[:external_messages][:password]
}}
# […]
或者是否有更好的/Rails-ish方法为各个型号设置不同的db连接?根据,建立连接方法接受散列作为输入。你试过这个吗-
class MessageImporter < ActiveRecord::Base
establish_connection {
:adapter => APP_CONFIG[:external_messages][:adapter],
:host => APP_CONFIG[:external_messages][:host],
:database => APP_CONFIG[:external_messages][:database],
:username => APP_CONFIG[:external_messages][:username],
:password => APP_CONFIG[:external_messages][:password]
}
根据,建立连接方法接受散列作为输入。你试过这个吗-
class MessageImporter < ActiveRecord::Base
establish_connection {
:adapter => APP_CONFIG[:external_messages][:adapter],
:host => APP_CONFIG[:external_messages][:host],
:database => APP_CONFIG[:external_messages][:database],
:username => APP_CONFIG[:external_messages][:username],
:password => APP_CONFIG[:external_messages][:password]
}
方法稍有不同,但效果良好: 将连接信息添加到常规数据库。yml: 注意嵌套!消息\u导入嵌套在开发下面 在消息_importer.rb中:
仍然想知道为什么我的第一种方法不起作用,但这正如预期的那样。方法有点不同,它起作用了: 将连接信息添加到常规数据库。yml: 注意嵌套!消息\u导入嵌套在开发下面 在消息_importer.rb中:
仍然想知道为什么我的第一种方法不起作用,但这正如预期的一样。Jup,我试过了。但是使用这些代码,我甚至会遇到语法错误:如果用字符串替换散列中的符号,会发生什么情况,所以:adapter=>APP_CONFIG['external_messages']['adapter']等等?这给了我一个警告,当你没有预料到它时,你有一个nil对象-错误找到一个解决方案将在8年后发布。。。这确实是一个语法错误,因为解释器认为您正在启动一个块,而不是传递散列。如果要传递散列,请使用显式括号来建立连接{…}现在散列卷曲是可选的。但是使用这些代码,我甚至会遇到语法错误:如果用字符串替换散列中的符号,会发生什么情况,所以:adapter=>APP_CONFIG['external_messages']['adapter']等等?这给了我一个警告,当你没有预料到它时,你有一个nil对象-错误找到一个解决方案将在8年后发布。。。这确实是一个语法错误,因为解释器认为您正在启动一个块,而不是传递散列。如果要传递散列,请使用显式括号建立连接{…}。现在散列卷曲是可选的。
development:
adapter: mysql
encoding: utf8
reconnect: false
database: […]
pool: 5
username: root
password:
socket: /tmp/mysql.sock
message_import:
adapter: mysql
encoding: utf8
username: […]
password: […]
database: […]
host: […]
class MessageImporter < ActiveRecord::Base
establish_connection configurations[RAILS_ENV]['message_import']