Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
720 views
in Technique[技术] by (71.8m points)

ruby - Passenger: internal server error

I installed Apache, Passenger and Sinatra and deployed an app. It gives error when trying to access:

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

How can I solve it?


Edit

In the application log, I found this line of error:

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

Gem list:

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)

System version:

Ruby 2.0
Apache 2.2
Amazon EC2 Instance

The app was running fine with Ruby 1.9 and Passenger 3.0. I just upgraded to 2.0, and Passenger 3.0 does not even compile correctly. They suggested me to use Passenger Pre 4.0, and it compiled fine, but does not run the app...

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I found the answer what is causing it in my case. In my config.ru I was redirecting STDOUT like this:

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

Removing the redirect into the log and it starts up again.

Looks like passenger needs STDOUT to detect a working "preloader".


Edit: I'm currently using the following solution to redirect the log into a file and keep passenger happy (basically just duplicating stdout into the log file and not redirecting):

log = File.new("logs/std.log", "a+")
def STDOUT.write string
    log.write string
    super
end
STDOUT.sync = true

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...