A small trick to avoid 404 error when redmine runs on dreamhost
Posted on 2011-07-10 17:47 Walzer 阅读(1477) 评论(0) 编辑 收藏 举报I locate my redmine webite on dreamhost shared-host. It works well in the first 8 months. But recently I meet 404 Page not found frequently when I post a topic in the forum, or create new issues. This weekend I decide to dig the bug.
The problem looks like this in redmine/log/production.log
Parameters: {"commit"=>"创建", "project_id"=>"test", "action"=>"create", "authenticity_token"=>"JOLhksjiN1Wmpt4iAVrw22Y+9+Pvdn1Kr6RwMQ3xDac=", "issue"=>{"start_date"=>"2011-07-09", "estimated_hours"=>"", "priority_id"=>"4", "parent_issue_id"=>"", "assigned_to_id"=>"", "subject"=>"performance test", "tracker_id"=>"1", "due_date"=>"", "status_id"=>"1", "description"=>"12313"}, "controller"=>"issues", "attachments"=>{"1"=>{"description"=>""}}}
Sending email notification to:
Redirected to http://project.cocos2d-x.com/issues/62
Completed in 674ms (DB: 408) | 302 Found [http://project.cocos2d-x.com/projects/test/issues]
Processing ApplicationController#index (for 125.77.152.242 at 2011-07-09 08:38:37) [GET]
ActionController::RoutingError (No route matches "/internal_error.html" with {:method=>:get}):
/dh/passenger/lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
/dh/passenger/lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
/dh/passenger/lib/phusion_passenger/railz/application_spawner.rb:400:in `start_request_handler'
/dh/passenger/lib/phusion_passenger/railz/application_spawner.rb:351:in `handle_spawn_application'
/dh/passenger/lib/phusion_passenger/utils.rb:184:in `safe_fork'
/dh/passenger/lib/phusion_passenger/railz/application_spawner.rb:349:in `handle_spawn_application'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:352:in `__send__'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:163:in `start'
/dh/passenger/lib/phusion_passenger/railz/application_spawner.rb:209:in `start'
/dh/passenger/lib/phusion_passenger/spawn_manager.rb:262:in `spawn_rails_application'
/dh/passenger/lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
/dh/passenger/lib/phusion_passenger/spawn_manager.rb:256:in `spawn_rails_application'
/dh/passenger/lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
/dh/passenger/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
/dh/passenger/lib/phusion_passenger/spawn_manager.rb:255:in `spawn_rails_application'
/dh/passenger/lib/phusion_passenger/spawn_manager.rb:154:in `spawn_application'
/dh/passenger/lib/phusion_passenger/spawn_manager.rb:287:in `handle_spawn_application'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:352:in `__send__'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
/dh/passenger/lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
Rendering /home/walzer/project.cocos2d-x.com/public/404.html (404 Not Found)
Processing IssuesController#show (for 999.999.999.99 at 2011-07-09 08:38:49) [GET]
Parameters: {"action"=>"show", "id"=>"62", "controller"=>"issues"}
Rendering template within layouts/base
Rendering issues/show.rhtml
Completed in 831ms (View: 312, DB: 484) | 200 OK [http://project.cocos2d-x.com/issues/62]
In the first paragraph, I create an issue. After that the passenger raise an "internal_error", and would like to find public/internal_error.html. Of course this file isn't exist, it's redmine/public/500.html instead. So I get a 404 error, public/404.html is rendered. In the 3rd paragraph, I refresh the page, and get the issue detail page correctly.
I contact the tech support of dreamhost, but the guy refuse to support problems of redmine. damn... I google this problem, many others met it but have no solutions given in their topics, such as
http://discussion.dreamhost.com/thread-130022.html (The tech support of dreamhost is just so so..)
http://groups.google.com/group/phusion-passenger/browse_thread/thread/c04394c2bf8440f6
http://railsforum.com/viewtopic.php?id=36826 (not completely the same)
They're the motion of writing this blog :)
OK, I must DIY now. I know almost nothing about rails, haha. So the breaking point is the 404 page.
1. copy 500.html to internal_error.html to avoid 400 error
After this step, the log looks correctly, but I get a internal_error.html rendered. Actually, I wish it still tell me something more about this error.
Parameters: {"board_id"=>"11", "commit"=>"Create", "action"=>"new", "authenticity_token"=>"+KpHpWkhr/4pJQ4tyOgkxtV/CE8tq05r8EM605DLiJE=", "controller"=>"messages", "message"=>{"subject"=>"Another test topic", "content"=>"go away 500! damn!", "sticky"=>"0", "locked"=>"0"}, "attachments"=>{"1"=>{"description"=>""}}}
Sending email notification to: xxxx@cocos2d-x.org, yyyy@tranzda.com, zzz@cocos2d-x.org, aaa@cocos2d-x.org, bbbb@cocos2d-x.org, ccccc@gmail.com
Redirected to http://www.cocos2d-x.org/boards/11/topics/2290
Completed in 2148ms (DB: 38) | 302 Found [http://www.cocos2d-x.org/boards/11/topics/new]
Processing MessagesController#show (for 999.999.999.99 at 2011-07-10 01:47:34) [GET]
Parameters: {"board_id"=>"11", "action"=>"show", "id"=>"2290", "controller"=>"messages"}
Rendering template within layouts/base
Rendering messages/show
Completed in 106ms (View: 72, DB: 20) | 200 OK [http://www.cocos2d-x.org/boards/11/topics/2290]
2. add this code into the header of redmine/public/internal_error.html
"http://www.w3.org/TR/html4/loose.dtd">
<head>
<META HTTP-EQUIV="refresh" CONTENT="0">
</head>
<html>
<title>Redirect</title>
<body>
<h1>I can not wait to refresh...</h1>
<form>
<input type="button" onClick="history.go(0)" value="Refresh">
</form>
</body>
</html>
Oh nice, when the passenger raises 500 error, it will not invoke public/500.html, but call my custom public/internal_error.html, and refresh to the right page immediately.
It's nothing but a small trick. I hope it can help others who meet the same problem :)