a ruthlessly handy library thank you,
I make use of it to speed up generating database seeds in a rails app (db/seeds.rb) file.
as such:
users = [
{
display_name: 'John McTest',
email: 'test@example.com',
password: password,
},
# ...
].in_threads.with_progress('users').map do |entry|
User.create!(entry)
end
In order to make use of database connections across threads, one needs to wrap each block with ActiveRecord::Base.connection_pool.with_connection.
For readability concerns, I would like to avoid sprinkling ActiveRecord::Base.connection_pool.with_connection throughout my seeds file.
Right now I use the following heavy handed global workaround:
require 'in_threads'
InThreads::Pool.class_eval do
def run(&block)
wrapped = ->{ ActiveRecord::Base.connection_pool.with_connection { block.call } }
@queue.push(wrapped)
end
end
I was wondering if there is a better, recommended way of handling this situation? Maybe a way to configure (or wrap) the default thread execution? Or if I could easily write a new in_db_threads helper that would behave like in_threads, but wrap with activerecord, but that seems impossible without monkey patching this gem.
a ruthlessly handy library thank you,
I make use of it to speed up generating database seeds in a rails app (
db/seeds.rb) file.as such:
In order to make use of database connections across threads, one needs to wrap each block with
ActiveRecord::Base.connection_pool.with_connection.For readability concerns, I would like to avoid sprinkling
ActiveRecord::Base.connection_pool.with_connectionthroughout my seeds file.Right now I use the following heavy handed global workaround:
I was wondering if there is a better, recommended way of handling this situation? Maybe a way to configure (or wrap) the default thread execution? Or if I could easily write a new
in_db_threadshelper that would behave likein_threads, but wrap with activerecord, but that seems impossible without monkey patching this gem.