辛い。辛いけど逃げられないので、頑張りたい。
まずはmigration
ファイルに使うシャードグループを書く。
db/migrations/YYYYYMMDDSSSSSScreate_delayed_job.rb
class CreateDelayedJobs < ActiveRecord::Migration
using_group :awesome_shard
def self.up
create_table :delayed_jobs, force: true do |table|
table.integer :priorit
このままmigration
をすると、テーブルは awesome_shard
のDBに作られる。
このまま Delayed::Job.enqueue
とか出来ない。シャード先のDBを参照するために using(:awsome_shard_1)
みたいなScopeが挟まってない事が問題。
bundle exec rails runner bin/delayed_job start
とかはできるけど、JobをDBから探してくるときにシャード先を参照しなくて永遠にJobを取得できない。
これを、どうにかするには、シャードグループ先のDBの一つに決め打ちで接続するようにする。
config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false
module Delayed
class Job < ::ActiveRecord::Base
octopus_establish_connection Octopus.config['shards']['awesome_shards']['awsome_shard_1']
end
end
octopus_establish_connection
に対して、決め打ちしたいDB先を指定してあげればそこに決め打ちで引きに行く。
これでOctopus環境下でもちゃんと動く。シャード分散したいとかはもっと工夫しなきゃダメ。