【问题标题】:How to read ActiveRecord configuration from own gem?如何从自己的 gem 中读取 ActiveRecord 配置?
【发布时间】:2014-11-10 10:28:43
【问题描述】:

我需要从我自己的 gem 中调用“建立连接”方法,但 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)

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    所有配置都在:

    Rails.application.config.database_configuration
    

    所以你有:

    db_config = Rails.application.config.database_configuration
    db_config['development']
    

    【讨论】:

      【解决方案2】:

      这里不需要打开任何文件。 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 相同的哈希值,这对于连接到数据库是必不可少的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多