我正在使用VPS。我用rails new rails_app -d mysql
创建了一个新的rails应用程序。
我和乘客一起跑nginx。我正在运行Rails 3.2.12和Ruby 1.9.3。在我的nginx.conf文件中,我将以下内容添加到server
指令中:
listen 80;
server_name www.mydomain.com;
passenger_enabled on;
root /home/mike/www/rails_app/public;
rails_env production;
当我指向www.mydomain.com时,我看到欢迎乘坐Ruby on Rails!当我点击关于您的应用程序的环境时,我收到此错误:
The page you were looking for doesn't exist.
当我检查我的production.log时,我看到了这个错误,并且不知道如何处理它:
ActionController::RoutingError (No route matches [GET] "/rails/info/properties")
我已经整晚都在阅读与此类似的所有SO问题,但仍无法解决我的问题。如果我在开发中运行它,一切正常。
修改
我找到了Rails 2.3.4问题的解释:该链接触发了对rails / info / properties的AJAX请求。属性操作在Rails :: InfoController中定义,它位于/rails/railties/builtin/rails_info/rails/info_controller.rb中。
路由不需要显式定义,因为它符合Rails的默认路由:controller /:action /:id(尽管在这种情况下没有ID,控制器存在于Rails命名空间内。)< / p>
但我在任何地方都看不到info_controller.rb
。
好的我发现了这个:config.consider_all_requests_local
是一面旗帜。如果为true,那么任何错误都会导致详细的调试信息被转储到HTTP响应中,Rails :: Info控制器将在/ rails / info / properties中显示应用程序运行时上下文。默认情况下,在开发和测试环境中为True,在生产模式下为false。对于更细粒度的控制,将其设置为false并实现local_request?在控制器中指定哪些请求应提供有关错误的调试信息。
但将此设置为false不会做任何事情。
编辑2
好吧,我是个白痴。在某个地方找到了这个:You're clicking the "About your application’s environment" link on the Rails default index.html page. This link only works in development environment, not in production.
整整一个晚上,我认为我的Rails应用程序无效。所以我想我会放弃然后去睡觉。
答案 0 :(得分:0)
您忘了添加passenger_base_uri:
server {
listen 80;
server_name domain.com;
charset utf-8;
root /www/domain.com/public_html;
passenger_enabled on;
passenger_base_uri /blog;
rails_spawn_method smart;
rails_env production;
}
同时检查乘客和导轨是否在相同的环境(生产或开发)中工作。
答案 1 :(得分:0)
对于将来可能遇到此问题的用户,请先检查服务器中的生产日志。
ssh username@serverIP
tail -20 /home/username/appname/current/log/production.log
cap production deploy
。答案 2 :(得分:-1)
我也面临同样的问题,但由于许可我后来发现病房,我们的应用程序无法访问特定文件夹。
尝试此命令:
chmod -R 777 {name of your project folder}/