Trabalhos gratuitos em segundo plano no heroku

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.