Edited at

非同期実行 Sidekiqの導入 Mac Ubuntu


はじめに

ついに弊社でもsidekiqを導入することにしました。(おせえよ)

導入に至った経緯はこんな感じ。


  • rundeckでバッチを定期的に起動している

  • バッチが増え的たら重くて動かなくなった(一応動くけど)

  • rundeckがおもい原因は重大なメモリ不足

  • メモリ不足の原因は数時間かかるバッチのレスポンスをひたすら待っているから

  • sidekiqに蹴り飛ばすしかねえ

という感じなのですが、今後の非同期実行処理にもかなり有用なので積極的に取り入れていきたいですね。

※レスポンスが必要な処理には向いてませんので何でもかんでもはNG。

(注意)かなり手探りでふわっとしています。

(注意)作業ログなので殴り書きチックです。


ローカルの環境設定と実装

sidekiq使うにはredisが必要です。

redisはNoSQLデータベースでsidekiqのジョブの管理とかに使ってます。

最低限のことしか設定してないんで、各自不便に思ったところは調べて改造してください。


Macにredisをインストール

$ brew install redis


gemの追加

sinatraはダッシュボードを見るために必要です。


Gemfile

# sidekiq

gem 'sidekiq'
gem 'sinatra', require: false
gem 'redis-namespace'

$ bundle install


設定ファイルの用意


config/initialize/sidekiq.rb

Sidekiq.configure_server do |config|

config.redis = { url: 'redis://127.0.0.1:6379', namespace: 'sidekiq' }
end

Sidekiq.configure_client do |config|
config.redis = { url: 'redis://127.0.0.1:6379', namespace: 'sidekiq' }
end



ワーカーの作成

generateで作っても普通にファイル作ってもOK。

こいつにぶん投げることになります。

rails g sidekiq:worker Update


/app/workers/get_info_worker.rb

class UpdateWorker

include Sidekiq::Worker

def perform
update_service = Products::UpdateService.new
update_service.execute
end
end



コントローラーの修正

さっき作ったワーカーにぶん投げます。

def product_update

UpdateWorker.perform_async
render json: { result: sidekiq_web_url }.to_json
rescue StandardError => e
raise e
end


routesの修正

ダッシュボード見るために設定します。


routes.rb

  require 'sidekiq/web'

mount Sidekiq::Web => '/sidekiq'


redisの起動

$ redis-server

スクリーンショット 2018-11-15 16.24.07.png


sidekiqの起動

$ bundle exec sidekiq

スクリーンショット 2018-11-15 16.24.01.png


完了!

http://localhost:3000/sidekiq

でダッシュボードが確認できます。

スクリーンショット 2018-11-15 16.10.29.png


本番環境設定

今回の対象は

Ubuntu 16.04.5 LTSです。


redisの設定

まずはインストール。

$ sudo apt install redis-server

完了して、

sudo service redis start

がエラーなく実行できればOKです。


sidekiqの設定

$ bundle install

これでOK。最高

デーモンで起動

$ bundle exec sidekiq --daemon --environment=production --logfile /project/[rails_project]/log/sidekiq.log


まとめ

難しすぎる...

これからうまく使えるようになればと思いましたねえ!!!

ブログで見たい方はこちら

非同期実行 Sidekiqの導入 Mac Ubuntu