Устранение неполадок рабочих Sidekiq на сайте Heroku Production

Я тестировал своих помощников локально в своей среде разработки, и они работают нормально. Однако, когда я нажимаю на Heroku, я не могу заставить своих рабочих даже начать.

Я не знаю, как лучше всего решить эту проблему, но вот некоторая информация:

Файл:

web: bundle exec unicorn -p $PORT -E $RACK_ENV -c ./config/unicorn.rb

У меня нет файла sidekiq.yaml.

Единорог.рб:

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 9999
preload_app true

before_fork do |server, worker|

  @sidekiq_pid ||= spawn("bundle exec sidekiq -c 2")
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
      ActiveRecord::Base.connection.disconnect!
end
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

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
      ActiveRecord::Base.establish_connection
end

Задача Rake, которая вызывает моего работника:

namespace :ivr do

  desc "For IVR"
  task get_welcome: :environment do
    NmeContactListWorker.perform_async('Welcome', 'IVR')
  end
end

Когда я вызываю эту задачу rake, я получаю в своих журналах heroku следующее:

2014-03-19T13:11:32.716759+00:00 heroku[api]: Starting process with command `bundle exec rake ivr:get_welcome` by [email protected]
2014-03-19T13:11:38.795843+00:00 heroku[run.3843]: State changed from starting to up
2014-03-19T13:11:38.711077+00:00 heroku[run.3843]: Awaiting client
2014-03-19T13:11:38.794029+00:00 heroku[run.3843]: Starting process with command `bundle exec rake ivr:get_welcome`
2014-03-19T13:11:47.171071+00:00 heroku[run.3843]: Process exited with status 0
2014-03-19T13:11:47.209653+00:00 heroku[run.3843]: State changed from up to complete

Я не уверен, как получить больше информации о том, почему мои работники терпят неудачу. Что может привести к тому, что это произойдет в производстве на Heroku, но отлично работает локально?


person Luigi    schedule 19.03.2014    source источник


Ответы (1)


В вашем procfile вам нужно запустить процесс sidekiq:

# Procfile
web: bundle exec unicorn -p $PORT -E $RACK_ENV -c ./config/unicorn.rb
worker: bundle exec sidekiq

Действительно, это то, что мы делаем на наших машинах для разработки, чтобы запустить sidekiq, открыть окно терминала и запустить команду sidekiq. Ваш unicorn.rb только настраивает Sidekiq, а не запускает его.

Примечание: после развертывания вы должны запустить воркер на героку с помощью:

heroku ps:scale worker=1
person DiegoSalazar    schedule 19.03.2014
comment
Круто - спасибо за подсказку! - person Luigi; 19.03.2014