Sidekiq 破管错误

Sidekiq Broken Pipe Error

我正在尝试从 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 gem 不在我的 Gemfile 中。

但错误仍然存​​在...任何人都可以伸出援手吗?

更新:我终于可以得到堆栈跟踪并看到它来自 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

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