LoginSignup
1
1

More than 5 years have passed since last update.

DelayedJobをOctopus環境で使う

Posted at

:octopus: 辛い。辛いけど逃げられないので、頑張りたい。

まずは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環境下でもちゃんと動く。シャード分散したいとかはもっと工夫しなきゃダメ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1