ruby - 为什么在运行 ruby 应用程序的 docker 容器中大约 60 秒后 Phusion Passenger 会超时?
问题描述
我正在使用乘客码头图像之一(phusion/passenger-ruby26)在码头集装箱内的乘客内部运行 ruby sinatra 应用程序。这个应用程序是一个简单的网络应用程序,它调用数据库(它不会不断地与数据库通信,只有在单击某个按钮时才会调用语句)。我可以很好地启动应用程序并在我的网络应用程序中单击一小段时间,但它总是在正常运行时间大约 60 秒时出错,说:
无法为应用程序 /home/app/my_app 生成进程:启动预加载器进程时发生超时。
错误 ID:3b9633ef
错误详细信息保存到:/tmp/passenger-error-aFglsc.html
请注意,即使我没有点击任何内容,也会发生这种情况。在 html 文件中,它声明:
Phusion Passenger 应用程序服务器尝试启动 Web 应用程序,但这花费了太多时间,因此Passenger 停止了它。
它表明服务器可能资源不足,但我给了它无限的资源(4 核 2.2GHz、16GB 内存和 4GB 交换),这是平均负载(使用的内存为 3%)
这是“问题位置”,表明它在“加载应用程序”子流程中出错。
我尝试过的事情:
- 从 Nginx 运行乘客(同样的错误)
- 删除我的 ruby 应用程序中的所有标准输出日志记录功能
- 增加passenger_start_timeout
- 确保正确设置文件夹/文件权限
- 使用最大化超时和资源的自定义 nginx-config-template 启动乘客
- 给我的 docker 容器无限的资源
尝试了一些我不记得的其他杂项,但也没有证明是有效的。
有谁知道会发生什么?如果需要,我会提供更多信息。
使用的版本:
- 乘客 6.0.3
- 红宝石 2.6.3
- 西纳特拉 2.0.5
- 码头工人 18.09.0
在 MacOS 10.14.6 上运行
解决方案
解决。结果是我运行了我的 ruby 应用程序两次。在主 app.rb 和 config.ru rackup 配置文件中有两个 run myapp 命令实例。在 ruby 项目中应该只有一个实例。