A small trick to avoid 404 error when redmine runs on dreamhost

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 

 

Processing IssuesController # create (for 999.999.999.99 at 2011-07-09 08:38:36) [POST]
  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.

 

Processing MessagesController # new (for 999.999.999.99 at 2011-07-10 01:47:29) [POST]
  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, [email protected], zzz@cocos2d - x.org, aaa@cocos2d - x.org, bbbb@cocos2d - x.org, [email protected]
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 ]

 

I can simply click refresh to get the right page. Why not do it automatically?

 

2. add this code into the header of redmine/public/internal_error.html

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "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 :)

你可能感兴趣的:(A small trick to avoid 404 error when redmine runs on dreamhost)