我在VPS上。我用rails new rails_app -d mysql
. 我正在与乘客一起运行 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 时,我看到 Welcome aboard 你正在使用 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 命名空间中。)
但我什么info_controller.rb
地方都看不到。
好的,我发现了这个:config.consider_all_requests_local
是一面旗帜。如果为 true,那么任何错误都会导致详细的调试信息被转储到 HTTP 响应中,并且 Rails::Info 控制器将在 /rails/info/properties 中显示应用程序运行时上下文。在开发和测试环境中默认为真,在生产模式下为假。对于更细粒度的控制,将其设置为 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 应用程序不工作了。所以我想我会放弃并去睡觉。