非同期実行 Sidekiqの導入 Mac Ubuntu
はじめに
ついに弊社でもsidekiqを導入することにしました。(おせえよ)
導入に至った経緯はこんな感じ。
- rundeckでバッチを定期的に起動している
- バッチが増え的たら重くて動かなくなった(一応動くけど)
- rundeckがおもい原因は重大なメモリ不足
- メモリ不足の原因は数時間かかるバッチのレスポンスをひたすら待っているから
- sidekiqに蹴り飛ばすしかねえ
という感じなのですが、今後の非同期実行処理にもかなり有用なので積極的に取り入れていきたいですね。
※レスポンスが必要な処理には向いてませんので何でもかんでもはNG。
(注意)かなり手探りでふわっとしています。
(注意)作業ログなので殴り書きチックです。
ローカルの環境設定と実装
sidekiq使うにはredisが必要です。
redisはNoSQLデータベースでsidekiqのジョブの管理とかに使ってます。
最低限のことしか設定してないんで、各自不便に思ったところは調べて改造してください。
Macにredisをインストール
$ brew install redis
gemの追加
sinatraはダッシュボードを見るために必要です。
# sidekiq
gem 'sidekiq'
gem 'sinatra', require: false
gem 'redis-namespace'
$ bundle install
設定ファイルの用意
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
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の修正
ダッシュボード見るために設定します。
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'
redisの起動
sidekiqの起動
完了!
http://localhost:3000/sidekiq
でダッシュボードが確認できます。
本番環境設定
今回の対象は
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
Author And Source
この問題について(非同期実行 Sidekiqの導入 Mac Ubuntu), 我々は、より多くの情報をここで見つけました https://qiita.com/ayies128/items/add88acef58280ef4b13著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .