FastCGI - incomplete headers + 500 error


#1

Hi,

I know this topic has been discussed before, but I tried every solutions still cannot solve it.

The thing is, I run my rails app in dreamhost, with FastCGI. (rails-0.14.3 + ruby-fcgi-0.8.6 + fcgi-2.4.0)
I can start my app, but I keep hitting 500 error randomly. That is, for the same page, I will get 500 sometimes, but ok after reload.

This is what I got from fastcgi.crash.log

[…] asked to terminate immediately
[…] terminated by explicit exit exit

And in apache log

… FastCGI: incomplete headers (0 bytes) received from server “/home/…/public/dispatch.fcgi”

I search all the forum on the web, and these are what I have done.

  1. change public/.htaccess to RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  2. chmod 755 for dispatch.fcgi, and log directory
  3. check the ruby path (#!/path/local/bin/ruby) in dispatch.fcgi
  4. make sure dispatch.fcgi is not dos format (run dos2unix)

But it still doesn’t work after I have done all of these.

Then I tried these

  1. http://convergentarts.com/articles/2005/08/16/new-fcgi_handler-rb-cuts-500-errors-or-so
    copy the lastest fcgi_handler.rb to lib
    but actually it’s unnecessary because that file is exactly the same as I have in rails 0.14-3
  • still doesn’t work
  1. http://forum.textdrive.com/viewtopic.php?id=2972
    according to this, fcgi has some problem from gem, so I uninstall fcgi gem, and make ruby-fcgi-0.8.6
    from source.
  • the 500 error times reduce, but will still hit it.
  1. downgrade rails to 0.13.1, no help

  2. try to run dispatch.fcgi manually

ruby dispatch.fcgi

I got : Status: 500 Internal Server Error
Is that normal ? Can you run dispatch.fcgi manually?

That really drives me crazy.
I don’t know what else I can try, please give me advise if you think of any.
Thanks!

Gary


#2

I am having exactly the same problem. My app seems to run stable once I’m down to one FCGI process. Until then, something keeps killing off my processes. This was not a problem two weeks ago and my app hasn’t changed.

I’m using 0.14.3 and the most current fcgi_handler just as above.

[13/Dec/2005:10:54:13 :: 9567] asked to terminate immediately
[13/Dec/2005:10:54:13 :: 9567] terminated by explicit exit

My application continues to work if I refresh, but having the application appear to crash is just not acceptable to me.


#3

Check with our support team and ask if our process monitor has been killing your processes. If you have a lot of processes hanging around that may be the case. We recently updated our process monitor to specifically handle dispatch.fcgi processes specially so that is probably not the problem but it’s worth asking.

  • Dallas
  • DreamHost Head Honcho/Founder

#4

Hi,

I finally use a work-around solution, maybe it will work for you.

I modified ruby/gems/1.8/gems/rails-0.14.3/lib/fcgi_handler.rb as below.

def exit_now_handler(signal)
dispatcher_log :info, “asked to terminate immediately”

force to restart

dispatcher_log :info, "but we will restart"
restart_handler(signal)
#exit
end

For signal TERM, I force dispatch.fcgi not to exit but restart. It looks weird but at least works for me. User will not see 500 error anymore, and will only need to wait a while to restart dispatch.fcgi if something goes wrong.

Good Luck!

Gary


#5

Yes, this solution does work well for me. In fact, it makes the app work better than it did before.