Rails + Sidekiq com um único dinamômetro heroku
Sidekiq é uma joia para trabalhos em segundo plano e uma ótima alternativa para Resque ou DelayedJob. Configurá-lo com um aplicativo rails no heroku normalmente requer um processo de trabalho extra.
Você pode evitar a necessidade de um dinamômetro extra usando o unicórnio como seu servidor da web. O Unicorn permite que você crie seus workers sidekiq em seu dinamômetro da web.
Sidekiq seu dinamômetro da web!
se você Profile
é assim
web: bundle exec unicorn -p $PORT -E $RACK_ENV -c ./config/unicorn.rb
em seguida, basta adicionar algo como o seguinte ao seu config/unicorn.rb
before_fork do |server, worker|
@sidekiq_pid ||= spawn("bundle exec sidekiq -c 2")
end
Limitação de conexão Redis
Se você estiver usando o sidekiq com o complemento nano redis-to-go do heroku, também poderá ser necessário ajustar a simultaneidade do sidekiq e o tamanho da conexão para não ultrapassar o limite de 10 conexões do nano. (veja esta postagem do blog para detalhes)
Aqui estão algumas configurações que eu uso em um pequeno aplicativo em produção no heroku com três processos de trabalho unicórnio, simultaneidade sidekiq definida como dois (veja acima) e plano nano do redis-to-go. Eu realmente não mexi muito com isso – até agora funciona sem problemas para mim.bundle exec sidekiq -c 2
config/unicorn.rb
worker_processes 3
after_fork do |server, worker|
Sidekiq.configure_client do |config|
config.redis = { :size => 1 }
end
Sidekiq.configure_server do |config|
config.redis = { :size => 5 }
end
end
Alternativa
Você também pode usar algo como sucker_punch . Ele faz todo o trabalho dentro do seu processo Rails, enquanto o Sidekiq é executado como um processo separado de longa duração, independente do seu processo Rails.