惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
GbyAI
GbyAI
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
A
About on SuperTechFans
M
MIT News - Artificial intelligence
宝玉的分享
宝玉的分享
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
博客园 - Franky
B
Blog RSS Feed
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - Walzer

1st Birthday of Cocos2d-x 团队基因论 github付费吃亏记 如何用cocos2d-x来做一个基于TileMap地图块的游戏 (一) 如何用cocos2d-x来开发简单的Uphone游戏:(五) 打包和发布 如何用cocos2d-x来开发简单的Uphone游戏:(四) 音乐音效 & 最后的润色 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 & 碰撞检测 如何用cocos2d-x来开发简单的Uphone游戏:(二) 移动的精灵 如何用cocos2d-x来开发简单的Uphone游戏:(一) 下载安装和HelloWorld HTC G1~G9手机硬件参数搜集,主要为游戏开发参考 手机应用商城的本质是实现手机的大规模客制化 一位神奇的高中生 手机游戏发展趋势分析和预测 MBTI职业性格在软件研发组织中不同岗位的分布研究 以满足客户的“占有欲”为一个竞争维度 尽信书不如无书:《人月神话中》外科手术团队模式的瓶颈 - Walzer - 博客园 个人思考:软件产品在什么情况下一定要走精品路线 用AHP层次分析法挑选最佳结婚对象 免费商业模式的四种基本模型
A small trick to avoid 404 error when redmine runs on dre...
Walzer · 2011-07-10 · via 博客园 - Walzer

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, 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]

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 :)