0

我在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 应用程序不工作了。所以我想我会放弃并去睡觉。

4

3 回答 3

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;
}

还要检查乘客和铁路是否在相同的环境(生产或开发)中工作。

于 2013-03-11T09:59:13.153 回答
0

对于将来可能会遇到此问题的人,请首先检查服务器中的生产日志。

  1. ssh 到你的服务器,ssh username@serverIP
  2. 检查最近 20 条左右的错误消息tail -20 /home/username/appname/current/log/production.log
  3. 如果这是您的代码中的错误(我的由于空数据库而返回一个空数组),则修复该错误并cap production deploy再次运行。
  4. 重复以检查更多错误。
于 2017-03-23T09:04:35.407 回答
-1

我也面临同样的问题,但我后来发现由于权限,我们的应用程序无法访问特定文件夹。

试试这个命令:

chmod -R 777 {name of your project folder}/
于 2013-03-11T05:58:36.600 回答