【发布时间】:2017-04-06 20:00:39
【问题描述】:
我正在尝试从 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。
【问题讨论】:
标签: amazon-ec2 ruby-on-rails-5 sidekiq foreman neo4j.rb