Rails 3 - ошибки разработки в производственном режиме

Я использую Rails, Passenger (оба версии 3.0.5) и Nginx на моем рабочем сервере . Как я слышал, Rails должен показывать public / 404.html или public / 500.html вместо ошибок разработки, таких как ActiveRecord :: RecordNotFound или Неизвестное действие , но этого не происходит. Я попытался удалить файл config.ru и установить в nginx.conf rails_env или rails_env, но ничего не помогло.

Вот мой nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    passenger_root /home/makk/.rvm/gems/ruby-1.9.2-p0/gems/passenger-3.0.5;
    passenger_ruby /home/makk/.rvm/bin/passenger_ruby;
    #passenger_ruby /home/makk/.rvm/wrappers/ruby-1.9.2-p0/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /home/makk/projects/1server/deploy/current/public;
            index  index.html index.htm;
            passenger_enabled on;
            rack_env production;

            recursive_error_pages on;

            if (-f /home/makk/projects/1server/maintenance.html) {
              return 503;
            }

            error_page 404 /404.html;
            error_page 500 502 504 /500.html;
            error_page 503 @503;
        }

        location @503 {
            error_page 405 = /maintenance.html;

            # Serve static assets if found.
              if (-f $request_filename) {
              break;
            }
            rewrite ^(.*)$ /maintenance.html break;
        }

        location ~ ^(\/phpmyadmin\/)(.*)$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_split_path_info         ^(\/phpmyadmin\/)(.*)$;
        fastcgi_param   SCRIPT_FILENAME /usr/share/phpmyadmin/$fastcgi_path_info;
        include         fastcgi_params;
        }
    }
}

Похоже, этот вопрос дублирует этот но рабочих предложений нет.

UPD : У меня есть приложения для разработки и производства на одном компьютере. В производственной среде Rails игнорирует config.consider_all_requests_local = false (в /config/environments/production.rb) из-за метода local_request? . Итак, одно из возможных решений приведено ниже (взято из здесь ):

# config/initializers/local_request_override.rb
module CustomRescue
  def local_request?
    return false if Rails.env.production? || Rails.env.staging?
    super
  end
end

ActionController::Base.class_eval do
  include CustomRescue
end

Или для Rails 3:

class ActionDispatch::Request
 def local?
   false
 end
end

7
задан Community 23 May 2017 в 11:55
поделиться