Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rails Async Process with Sidekiq

wtnabe
August 29, 2015

Rails Async Process with Sidekiq

『Railsで非同期処理 - Sidekiqを使うための準備と使ってみて気づいたこと』 via Kanazawa.rb meetup #36

wtnabe

August 29, 2015
Tweet

More Decks by wtnabe

Other Decks in Programming

Transcript

  1. ⾮同期⽤のGem Rails 4.2+ ActiveJob ( adaptor ) Rails 4.1- (various

    methods) DelayedJob BackgrounDrb Rescue Sidekiq
  2. Procfile Sidekiq⽤に別なRailsを⽴ち上げるイメージ web: bundle exec rails s redis: redis-server worker:

    mkdir -p tmp/pids && \ bundle exec sidekiq \ -C config/sidekiq.yml Unicornと同じように全部bundle execで済んじゃう
  3. sidekiq.ymlの例 :concurrency: 3 :staging: :concurrency: 9 :production: :concurrency: 9 development

    は SQLite, production と staging で web と worker 2つの サーバから max 20 conn までの DB サーバに繋ぐ想定
  4. Dashboard in Gemfile gem 'sinatra' in routes.rb require 'sidekiq/web' mount

    Sidekiq::Web => '/sidekiq' もちろんアクセス制限は忘れないで>< 
  5. class BulkThumbnailGeneratorWorker include Sidekiq::Worker def perform(k, id, attr, size) r

    = Object.const_get(k).find(id) ... end end 例えば⼀括サムネイル⽣成
  6. ジョブの分け⽅ ⼤量の作業が必要な場合 peform の中で each しない each の中で perform_in を呼ぶ

    処理に掛かる時間を予測して遅延時間 を指定しておく もちろん必要な遅延時間はあらかじめ予測して検証する