我需要从我自己的gem调用“establish_connection”方法,但ActiveRecord :: Base.configurations是[]。
我做了解决方法:
module Bitrix
class Database < ActiveRecord::Base
@config = YAML.load(File.read('config/database.yml'))
self.abstract_class = true
establish_connection @config["bitrix_#{Rails.env}"]
end
end
但是为什么我不能直接打开文件就无法访问AR配置?我尝试使用establish_connection :"bitrix_#{Rails.env}"
并收到此错误:
/usr/local/var/rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/connection_adapters/connection_specification.rb:257:in` resolve_symbol_connection':'bitrix_development'数据库未配置。可用:[](ActiveRecord :: AdapterNotSpecified)
答案 0 :(得分:1)
所有配置均可在以下位置获取:
Rails.application.config.database_configuration
所以你有:
db_config = Rails.application.config.database_configuration
db_config['development']
答案 1 :(得分:0)
此处不需要打开任何文件。 ActiveRecord
需要正确的配置才能知道如何连接到给定的数据库,例如:
{"template"=>"template0", "adapter"=>"postgresql",
"encoding"=>"UTF8", "database"=>"database", "pool"=>50,
"username"=>"rails", "password"=>nil}
加载database.yml
将yaml
解析为哈希,将环境名称作为键,将其配置作为值。
config = YAML.load(File.read('config/database.yml'))
establish_connection config["bitrix_#{Rails.env}"]
使用adapter
,user
和password
返回或多或少相同的哈希,这对于连接数据库至关重要。