【问题标题】:How to pass an activerecord connection to a custom gem in ruby如何将activerecord连接传递给ruby中的自定义gem
【发布时间】:2015-04-08 19:23:03
【问题描述】:

我正在尝试将 activerecord 连接传递给更新我的数据库和几个表的 gem。到目前为止,我一直没有成功。我需要多个线程都连接到数据库来添加数据。

调用 MyGem gem 的主代码

database_yml = File.expand_path('database.yml', File.dirname(__FILE__))
db_config = YAML.load_file(database_yml)
connection = ActiveRecord::Base.establish_connection(db_config)

puts "Command array: #{options_array}"
threads = options_array.length
options_array.pmap(threads) do |option|
  MyGem::RoboCopy.run_and_parse_robocopy option, connection
end

此调用的 Gem 方法

module MyGem
  class RoboCopy
    def self.run_and_parse_robocopy(options, db_connection)
      ActiveRecord::Base.connection db_connection
      statistic = RobocopyData.create output_file: options[:output_file], file_gen_start: Time.now.strftime("%Y-%m-%d %H:%M:%S"), status: 'Started'
      #More Code
    end
  end
end

这会导致以下错误:

ArgumentError: 调用 connection 的参数数量错误(1 代表 0)

我试过了

ActiveRecord::Base.connection = db_connection

但出现此错误:

NoMethodError:ActiveRecord::Base:Class 的未定义方法 `connection='

我错过了什么?

谢谢

【问题讨论】:

    标签: ruby activerecord gem


    【解决方案1】:

    不要传递连接对象本身,而是传递 db_config 然后在你的 gem 中建立一个新的连接:

    在您的主代码中:

    MyGem::RoboCopy.run_and_parse_robocopy option, db_config
    

    在您的宝石中:

    module MyGem
      class RoboCopy
        def self.run_and_parse_robocopy(options, db_config)
          ActiveRecord::Base.establish_connection db_config
          # ...
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多