From: Kai Krakow Date: 2008-05-16T02:49:54+09:00 Subject: Re: Using Derrick Pallas' ruby fcgi dispatcher I think I found the problem: > On 9 Mai, 18:34, Martin Boese wrote: > > > No clue, but I suggest you to add some: > > > > $stderr.puts "TEST X: #{cgi.params.inspect}" > > > ...all over that dispatcher script to see where the problem starts (it will > > log to lighttpd's error log). > > It starts right in the first line of the FCGI.each_cgi loop: > > 54 FCGI.each_cgi do |cgi| > 55   $stderr.puts "TEST1: #{cgi.params.inspect}" > > On first request the parameters are correct. On subsequent requests > the hash is just plain empty: > > 2008-05-13 15:30:23: (mod_fastcgi.c.2592) FastCGI-stderr: TEST1: > {"time"=>["jetzt"], ..., "keyword"=>["bla"]} > 2008-05-13 15:30:44: (mod_fastcgi.c.2592) FastCGI-stderr: TEST1: {} > > >  I also had many problems with fcgi and lighttpd mainly because it was setting > > different environment variables than other webserver (webrick). To fix this I > > first modify the environment table before I continue and so far I have no > > problems: > > class CGI [...] > > I've put that class into my dispatcher in front of the loop and > patched the loop to call fix_env(). Provided this was correct how I've > done it, it doesn't fix my problem. > > It's also not dependent on the webbrowser or different vs. same params > on subsequent request. The second and further requests just have an > empty parameter hash. A lighttpd restart is required to get it working > for one time again. The problem seems to be that ruby's FCGI class clears the param hash but doesn't reparse the query string upon next request. In my case cgi.params just ends up empty. Since I didn't yet fully understand how the FCGI class works and extends the CGI class, I just patched Derrick's dispatcher: @ about line 30 def getBinding(cgi,env) + cgi.params = CGI::parse env["QUERY_STRING"] return binding end This makes updating the cgi instance before the binding for the eval is returned. I'm not sure if this is a valid fix but it work's in my case. Also I am not sure if it is a wanted behaviour of class FCGI to not reparse the query string in the FCGI.each_cgi loop. So this is in my case fixed/hacked/whatever.