如何将 activerecord 连接传递到 ruby 中的自定义 gem
How to pass an activerecord connection to a custom gem in ruby
我正在尝试将一个 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=”
我错过了什么?
谢谢
不是传递连接对象本身,而是传递 db_config 然后在您的 gem:
中建立一个新连接
在您的主要代码中:
MyGem::RoboCopy.run_and_parse_robocopy option, db_config
在你的gem中:
module MyGem
class RoboCopy
def self.run_and_parse_robocopy(options, db_config)
ActiveRecord::Base.establish_connection db_config
# ...
end
end
end
我正在尝试将一个 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=”我错过了什么?
谢谢
不是传递连接对象本身,而是传递 db_config 然后在您的 gem:
中建立一个新连接在您的主要代码中:
MyGem::RoboCopy.run_and_parse_robocopy option, db_config
在你的gem中:
module MyGem
class RoboCopy
def self.run_and_parse_robocopy(options, db_config)
ActiveRecord::Base.establish_connection db_config
# ...
end
end
end