Help us understand the problem. What is going on with this article?

非同期実行 Sidekiqの導入 Mac Ubuntu

More than 1 year has passed since last update.

はじめに

ついに弊社でも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

ayies128
株式会社illustrious CTO。 EC業務を色々な角度から効率化できるように日々システム開発を行っています。 システム開発の話から飲みに行こうって話までなんでもどうぞ。 うどんとお酒と #UVERWorld が大好きです。 世界で売るためのECインフラサービス「lismoa」の開発運営を行なっています。 https://lismoa.com/
http://nabesys.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした