sidekiq не генерирует файл sidekiq.pid на героку, используя с Redistogo

В течение двух дней я боролся за то, чтобы заставить sidekiq работать над производственной средой heroku. Я прочитал всю доступную документацию о подобных проблемах, и все еще не смог найти работающее решение, мне действительно нужна помощь!

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

2014-09-23T23:38:40.905093+00:00 app[worker.1]: No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid
2014-09-23T23:38:40.905122+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `<main>'
2014-09-23T23:38:40.905119+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/bin/sidekiq:7:in `<top (required)>'
2014-09-23T23:38:40.905117+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `write_pid'
2014-09-23T23:38:40.905115+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `open'
2014-09-23T23:38:40.905121+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `load'
2014-09-23T23:38:40.905118+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:41:in `parse'
2014-09-23T23:38:40.905114+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `initialize'
2014-09-23T23:38:39.588001+00:00 heroku[worker.1]: State changed from starting to up

Во-первых, sidekiq правильно работает на моей локальной машине. Я использую REDISTOGO для Herois для Redis, на местном производстве Sidekiq правильно указали на REDISTOGO и работают нормально.

Во-вторых, согласно трассировке стека, особенно эта строка No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid; это заставляет меня думать, что по какой-то причине sidekiq.pid файл не генерируется правильно при запуске на героку. На местной среде, sidekiq.pid файл создается каждый раз, когда я запускаю приложение в app/tmp/pids/ каталог, и назначает другой pid номер каждый раз. я guessing что при беге на героку, sidekiq попытался прочитать из этого файла, но не смог найти его.

Вот содержание в моем Procfile:

web: bundle exec rails server
worker: bundle exec sidekiq -C config/sidekiq.yml

Вот содержание в моем config/sidekiq.yml

---
:verbose: true
:pidfile: ./tmp/pids/sidekiq.pid
:concurrency: 25
# Set timeout to 8 on Heroku, longer if you manage your own systems.
:timeout: 8
:queues:
  - carrierwave

Вот содержание в моем sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"}
end

Sidekiq.configure_client do |config|
    config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"}
end

Обновить 1:

я использую carrierwave а также carrierwave-backgrounder синхронно с sidekiq,

3 ответа

Решение

Эта проблема была решена с помощью следующих действий:

1) Спасибо @MikePerham за указание на правильное направление, сначала я удалил эту строку в своем sidekiq.yml файл:

:pidfile: ./tmp/pids/sidekiq.pid

2) Тогда по моему ProcfileЯ должен был использовать следующую строку для замены источника:

web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml

Сейчас sidekiq корректно работает с редистого на героку для меня.

Я нашел полезным добавить каталог в репозиторий и повторно развернуть приложение.

mkdir -p tmp/pids
touch tmp/pids/.gitkeep
git add -f tmp/pids/.gitkeep
git commit -m 'Keep tmp/pids directory in repo'

Надеюсь это поможет.

Это было исправлено pids каталог в tmp каталог в корне проекта

Другие вопросы по тегам