Я пытаюсь перейти с Heroku на AWS, но мои задания Sidekiq продолжают давать сбой со следующей ошибкой:
Errno::EPIPE: Broken pipe @ io_write - <STDOUT>
Я могу успешно запускать задания из консоли с помощью perform_now
, и все отлично работает в Heroku, поэтому я предполагаю, что проблема кроется где-то в моей настройке AWS. Я видел ссылки на неправильную демонизацию вокруг Stack Overflow и Github, но не знаю, как решить эту проблему.
Прямо сейчас я запускаю свои процессы с помощью следующей команды:
foreman start -f Procfile -p 3000 -e $VAR_FILES &
и я пробовал команду как с &
в конце, так и без нее.
Мой Procfile выглядит так:
web: bundle exec puma -t 1:2 -p ${PORT:-3000} -e ${RACK_ENV:-production}
worker: bundle exec sidekiq -C config/sidekiq.yml
log: tail -f log/production.log
и я также пробовал это так, следуя инструкциям здесь (https://github.com/mperham/sidekiq/wiki/Logging#syslog):
worker: bundle exec sidekiq -C config/sidekiq.yml 2>&1 | logger -t sidekiq
У моего sidekiq.yml
logfile
установлено на ./log/sidekiq.log
, что, как я полагаю, в любом случае должно перенаправлять журналы из STDOUT.
Я видел обсуждение здесь (https://github.com/mperham/sidekiq/issues/3188) и может убедиться, что драгоценного камня rails12factor
нет в моем Gemfile.
Но все равно ошибка сохраняется... Может ли кто-нибудь протянуть руку?
ОБНОВЛЕНИЕ: наконец-то я могу получить трассировку стека и увидеть, что она исходит из оператора puts
внутри драгоценного камня Neo4j.rb:
2017-04-07T15:46:53.553Z 697 TID-12a6r4 WARN: Errno::EPIPE: Broken pipe @ io_write - <STDOUT>
2017-04-07T15:46:53.553Z 697 TID-12a6r4 WARN: /var/lib/gems/2.3.0/bundler/gems/neo4j-c804cb33bef8/lib/neo4j/session_manager.rb:60:in `write'
/var/lib/gems/2.3.0/bundler/gems/neo4j-c804cb33bef8/lib/neo4j/session_manager.rb:60:in `puts'
/var/lib/gems/2.3.0/bundler/gems/neo4j-c804cb33bef8/lib/neo4j/session_manager.rb:60:in `puts'
Но все еще не уверен, как я могу смягчить проблему. Я пробовал с RAILS_LOG_TO_STDOUT=enabled
как установленным, так и неустановленным.