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 语句。它解决了我的问题!
我正在尝试从 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 语句。它解决了我的问题!