我安装了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,它编译得很好,但不运行应用程序…
最佳答案
我找到了在我的案子中是什么引起的答案。在我的config.ru
中,我像这样重定向STDOUT
:
log = File.new("logs/std.log", "a+")
STDOUT.reopen(log)
删除指向日志的重定向,它将再次启动。
看起来乘客需要
STDOUT
来检测一个正在工作的“预载器”。编辑:我目前正在使用以下解决方案将日志重定向到一个文件中并让乘客满意(基本上只是将stdout复制到日志文件中而不是重定向):
log = File.new("logs/std.log", "a+")
def STDOUT.write string
log.write string
super
end
STDOUT.sync = true
关于ruby - 乘客:内部服务器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15328326/