如何从自己的gem读取ActiveRecord配置?

时间:2014-11-10 10:28:44

标签: ruby-on-rails activerecord

我需要从我自己的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)

2 个答案:

答案 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.ymlyaml解析为哈希,将环境名称作为键,将其配置作为值。

config = YAML.load(File.read('config/database.yml'))
establish_connection config["bitrix_#{Rails.env}"]

使用adapteruserpassword返回或多或少相同的哈希,这对于连接数据库至关重要。