Rails 프로젝트에 Sidekiq 세팅하기





sidekiq 세팅


Rails 로컬 환경에 sidekiq 세팅

1. Redis 설치

Redis 다운로드 및 빌드

$ wget http://download.redis.io/releases/redis-3.2.5.tar.gz
$ tar xzf redis-3.2.5.tar.gz
$ cd redis-3.2.5
$ make

Redis 실행

$ src/redis-server

Redis 클라이언트 접속

$ src/redis-cli

참고자료

2. sidekiq 관련 설치

Gemfile에 추가

gem 'sidekiq'
 
gem 'connection_pool'
gem 'redis-objects'

bundle install

bundle install

3. Rails 프로젝트 세팅

config/sidekiq.yml

:pidfile: ./tmp/pids/sidekiq.pid
:daemon: true
 
development:
  :verbose: true
  :logfile: ./log/sidekiq.development.log
  :concurrency: 5
  :timeout: 30
  :queues:
    - default
    - test
 
production:
  :verbose: false
  :logfile: ./log/sidekiq.production.log
  :concurrency: 10
  :timeout: 5
  :queues:
    - default
    - test

config/redis.yml

defaults: &defaults
  url: redis://localhost:6379/1
  object_redis_url: redis://localhost:6379/2
 
development:
  <<: *defaults
 
production:
  <<: *defaults
 
test:
  <<: *defaults
 
spec:
  <<: *defaults

config/environments/development.rb, config/environments/production.rb 에 추가

config.active_job.queue_adapter = :sidekiq

config/initializers/sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: CONFIG.redis.url }
end
 
Sidekiq.configure_client do |config|
  config.redis = { url: CONFIG.redis.url }
end
 
Sidekiq.default_worker_options = {retry: 1}

config/initializers/redis.rb

require 'connection_pool'
 
Redis::Objects.redis = ConnectionPool.new(size: 5, timeout: 3) { Redis.new(url: CONFIG.redis.object_redis_url, logger: Rails.logger) }

config/initializers/config.rb (CONFIG 변수로 쓰기 위해서)

CONFIG = Rails.configuration.x

config/routes.rb (모니터링 사용하기 위해)

require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

4. 테스트용 Job 작성 및 테스트

app/jobs/test_job.rb

class TestJob
  include Sidekiq::Worker
  sidekiq_options queue: 'test'
  sidekiq_options :retry => false
 
  def perform(test_id)
    puts "Doing test work"
    puts "test_id: #{test_id}"
  end
end

Job 동작 확인: http://localhost:3000/sidekiq



댓글

이 블로그의 인기 게시물

ansible ssh 접속 에러 해결

OpenWeatherMap API 이용해서 날씨 데이터 가져오기