Sword 1.0b5 · A simple and friendly weblogging tool for academic environments created by Fingertips design & development.

 
 
 
 
 

Hanging FCGI-processes with Edge Rails and lighttp

TrackBack link: http://blog.markjuh.net/markjuh/trackback/2005/9/26/hanging_fcgi_processes_with_edge_rails_a

Published on 26 September 2005 at 14:51, updated at 14:51.

In category Rails.

For quite some time now, if you use lighttpd combined with Edge Rails, the Rails FCGI-processes don’t terminate when lighttpd terminates. This is strange, since lighttpd sends the TERM signal to the FCGI-processes. I had to use a kill -9 to actually end the FCGI-processes.

Rick Olson confirmed this behaviour and we tried to track it down. We couldn’t find it back then, but since then I got SO annoyed that I looked into it a bit more.

It seems that the problem is in vendor/rails/railties/lib/fcgi_handler.rb. It shows that the TERM signal is handled by the graceful_exit_handler. This handler sets whenready to :exit, which should make sure that the FCGI-process ends after processing the current or next FCGI-request.

And now this last part exactly forms the problem. When lighttpd terminates, the FCGI-process is waiting for the next request to come so it can finish gracefully. But the next request never comes, since lighttpd is already down, so there is no process to send requests to the FCGI-process.

So, I’ve written a dirty hack to fix this problem. David Heinemeier Hansson already promised to fix it the right way, but I just couldn’t wait for that to happen. (Using kill -9 every time you restart the webserver is just too annoying.)

Comments

Tarmo Tänav on 28 October 2005 at 06:41.

For some reason I still see the same problem with lighttpd-1.4.6 and rails-0.14.1. Your patch does not apply to rails anymore, but I made a new one which does the same thing: http://tarmo.itech.ee/fix_fcgi_exit_when_autospawning_v2.diff

Mark van Eijk on 15 November 2005 at 16:13.

I know, it’s a dirty little hack…

But it should now be fixed in Rails changeset 2847.

New comments are disabled for this post