I am running Rails 0.14.3 on a RedHat Linux server (at Rackspace if it matters). I have a completely vanilla installation of Rails set up, with one controller and an index method that does nothing and a template that just outputs "Hello!". Nothing fancy. When I load up WEBrick, I can hit the controller URL and it works fine. I see my template, all is well. When I hit the controller URL via Apache (1.3.27), I get a "Status: 500 Internal Server Error". Nothing at all appears in the log/development.log file either. Now this is running on a virtual host, and I have confirmed that all my suexec permissions are correct (in fact if I put a small "Hello World" Ruby CGI in the folder, with all the same ownership and permissions, it runs fine - I am fairly confident this isn''t the problem). So I started tracing back through the Rails codebase from the dispatch.cgi file, outputting some messages as I went, to figure out where the script was actually failing. I inspected the cgi object that is returned in the ''dispatch'' method in dispatcher.rb in the actual rails gem, and it looks like this: #CGI:0x409fb4b0 @multipart=false, @cookies={"__utma"=>["11232945.1217992048.1134517517.1134517517.1134517517.1"], "_session_id"=>["598ed6bd708ed7ca716350153e277926"], "__utmc"=>["11232945"], "__utmz"=>["11232945.1134517517.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)"]}, @output_hidden=nil, @output_cookies=nil, @params={} The request object looks like this: #ActionController::CgiRequest:0x409fb4d8 @session_options={:session_path=>"/", :prefix=>"ruby_sess.", :database_manager=>CGI::Session::PStore}, @cgi=#<CGI:0x409fb4b0 @multipart=false, @cookies={"__utma"=>["11232945.1217992048.1134517517.1134517517.1134517517.1"], "_session_id"=>["598ed6bd708ed7ca716350153e277926"], "__utmc"=>["11232945"], "__utmz"=>["11232945.1134517517.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)"]}, @output_hidden=nil, @output_cookies=nil, @params={} Now, where this actually falls apart is during the process that happens a few lines lower, here: ActionController::Routing::Routes.recognize!(request).process(request, response).out(output) I managed to figure out (I think) that the process command is being executed on a returned object of type controller, in actionpack/lib/controller/action_controller/base.rb Within there I followed it to the "assign_shortcuts" method (which takes the request and response objects as parameters) and it fails on the line @response.session = request.session If I put in output before that line, it works fine, if I put output after that line, it doesn''t show up, so this seems to be where the exception is being thrown? I continued to dig into the session stuff a bit but that''s when I got totally lost. My controller isn''t even starting up a session, unless this happens automatically? Any help would be greatly appreciated, I feel I''m so close to getting this going, but I''m still new-ish to Ruby and to Rails as well.. Thanks alot, Seb -- Posted via http://www.ruby-forum.com/.
Mark Reginald James
2005-Dec-14 05:53 UTC
Re: 500 Error running the dispatchers in Apache?
Seb Barre wrote:> Within there I followed it to the "assign_shortcuts" method (which takes > the request and response objects as parameters) and it fails on the line > > @response.session = request.session > > If I put in output before that line, it works fine, if I put output > after that line, it doesn''t show up, so this seems to be where the > exception is being thrown? > > I continued to dig into the session stuff a bit but that''s when I got > totally lost. My controller isn''t even starting up a session, unless > this happens automatically?Try deleting old sessions. On Unix, /tmp/ruby_sess* -- We develop, watch us RoR, in numbers too big to ignore.