Sidekiq断管错误

时间:2017-04-06 20:00:39

标签: amazon-ec2 ruby-on-rails-5 sidekiq foreman neo4j.rb

我正在尝试从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.ymllogfile设置为./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设置和取消设置。

1 个答案:

答案 0 :(得分:0)

我与gem维护者交谈,他们删除了v 8.0.13中的puts语句。它解决了我的问题!