16

我安装了 Apache、Passenger 和 Sinatra 并部署了一个应用程序。尝试访问时出错:

An error occurred while starting up the preloader: it did not write a startup response in time.

Application root
    /var/www/html/test
Environment (value of RAILS_ENV, RACK_ENV, WSGI_ENV and PASSENGER_ENV)
    production
Ruby interpreter command

    /usr/local/bin/ruby

User and groups

    Unknown

Environment variables

    Unknown

Ulimits

    Unknown

我该如何解决?


编辑

在应用程序日志中,我发现了这一行错误:

!> Ready
!> socket: unix:/tmp/passenger.1.0.14019/generation-0/backends/preloader.14049
!>

宝石清单:

bigdecimal (1.2.0)
builder (3.2.0)
bundler (1.3.1)
daemon_controller (1.1.1)
fastthread (1.0.7)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
passenger (4.0.0.rc4)
psych (2.0.0)
rack (1.5.2)
rack-protection (1.4.0)
rake (0.9.6)
rdoc (4.0.0)
sequel (3.45.0)
sinatra (1.3.5)
test-unit (2.0.0.0)
tilt (1.3.4)

系统版本:

Ruby 2.0
Apache 2.2
Amazon EC2 Instance

该应用程序在 Ruby 1.9 和 Passenger 3.0 上运行良好。我刚刚升级到 2.0,Passenger 3.0 甚至没有正确编译。他们建议我使用Passenger Pre 4.0,它编译得很好,但没有运行应用程序......

4

4 回答 4

19

我找到了答案是什么导致了我的情况。在我的config.ru我是这样重定向STDOUT的:

log = File.new("logs/std.log", "a+")
STDOUT.reopen(log)

将重定向删除到日志中,它会再次启动。

看起来乘客需要STDOUT检测一个工作的“预加载器”。


编辑:我目前正在使用以下解决方案将日志重定向到文件并让乘客满意(基本上只是将标准输出复制到日志文件中而不是重定向):

log = File.new("logs/std.log", "a+")
def STDOUT.write string
    log.write string
    super
end
STDOUT.sync = true
于 2013-03-11T23:05:16.563 回答
4

如果上述方法不能为您解决问题,我会收到完全相同的错误消息,但原因不同。

就我而言,我们使用的是外部数据库服务器,但该服务器已关闭。

备份外部数据库服务器解决了这个问题。

但在我们解决这个问题之前,我们花了很多时间考虑重新编译乘客等。

希望这篇笔记可以节省一些时间。

于 2013-04-01T15:35:04.103 回答
1

供将来参考:我的配置中有错误的数据库凭据,这导致了同样的错误。

于 2015-01-14T06:03:01.927 回答
1

要解决此问题,请按照 phusion phassenger https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems的本指南进行操作

于 2013-07-25T14:48:53.923 回答