Hello Guys,
Yesterday i was phasing one interesting problem. Sharing single database between 2 rails application but now i've requirement to use application specific table for delayed jobs.
Lets assume i've application called DemoApp & TestApp. And both sharing single DB called 'demo_app_prod'. Now for TestApp i required separate DB called 'test_app_prod' which has single table called 'delayed_jobs'.
Step1:
at TestApp you have database.yaml like
login: &login
adapter: mysql
username: admin
host: localhost
password:
development:
<<: *login
database: demo_app_dev
test:
<<: *login
database: demo_app_test
production:
<<: *login
database: demo_app_prod
staging:
<<: *login
database: test_app_prod
Step2:
at TestApp added migration called
rails generate migration add_delayed_job
class AddDelayedJob < ActiveRecord::Migration
def connection
ActiveRecord::Base.establish_connection(Rails.env).connection
end
def up
oldEnv = Rails.env
Rails.env = 'staging' #set environment variable from your database.yml
ActiveRecord::Base.establish_connection(Rails.env)
create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0
table.integer :attempts, :default => 0
table.text :handler
table.text :last_error
table.datetime :run_at
table.datetime :locked_at
table.datetime :failed_at
table.string :locked_by
table.timestamps
end
Rails.env = oldEnv
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env]
end
def down
oldEnv = Rails.env
Rails.env = 'staging'
ActiveRecord::Base.establish_connection(Rails.env).connection
drop_table :delayed_jobs
Rails.env = oldEnv
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env]
end
end
Step3:
In initializers/delayed_job.rb add below lines
Delayed::Job.class_eval do
establish_connection ActiveRecord::Base.configurations["local"]
end
This the easy way to establish multiple db connection via ruby for delayed job.
Yesterday i was phasing one interesting problem. Sharing single database between 2 rails application but now i've requirement to use application specific table for delayed jobs.
Lets assume i've application called DemoApp & TestApp. And both sharing single DB called 'demo_app_prod'. Now for TestApp i required separate DB called 'test_app_prod' which has single table called 'delayed_jobs'.
Step1:
at TestApp you have database.yaml like
login: &login
adapter: mysql
username: admin
host: localhost
password:
development:
<<: *login
database: demo_app_dev
test:
<<: *login
database: demo_app_test
production:
<<: *login
database: demo_app_prod
staging:
<<: *login
database: test_app_prod
Step2:
at TestApp added migration called
rails generate migration add_delayed_job
class AddDelayedJob < ActiveRecord::Migration
def connection
ActiveRecord::Base.establish_connection(Rails.env).connection
end
def up
oldEnv = Rails.env
Rails.env = 'staging' #set environment variable from your database.yml
ActiveRecord::Base.establish_connection(Rails.env)
create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0
table.integer :attempts, :default => 0
table.text :handler
table.text :last_error
table.datetime :run_at
table.datetime :locked_at
table.datetime :failed_at
table.string :locked_by
table.timestamps
end
Rails.env = oldEnv
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env]
end
def down
oldEnv = Rails.env
Rails.env = 'staging'
ActiveRecord::Base.establish_connection(Rails.env).connection
drop_table :delayed_jobs
Rails.env = oldEnv
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env]
end
end
Step3:
In initializers/delayed_job.rb add below lines
Delayed::Job.class_eval do
establish_connection ActiveRecord::Base.configurations["local"]
end
This the easy way to establish multiple db connection via ruby for delayed job.
No comments:
Post a Comment