我正在尝试从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)并且可以验证我的Gemfile中没有rails12factor
gem。
但仍然存在错误......任何人都可以伸出援手吗?
更新:我终于可以得到一个堆栈跟踪,看看它来自Neo4j.rb gem中的puts
语句:
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
设置和取消设置。
答案 0 :(得分:0)
我与gem维护者交谈,他们删除了v 8.0.13
中的puts语句。它解决了我的问题!