Rack::ShowExceptions включен в рабочей версии Rails 4.0.4

Столкнулся со странной проблемой, когда Rack::ShowExceptions отображает подробные исключения для моего приложения rails 4.0.4 в производственной среде. Добавление config.middleware.delete(Rack::ShowExceptions) к config/application.rb по-прежнему приводило к шаблону Rack::ShowExceptions рендерится, и поэтому я ожидаю, что здесь скрывается некоторая зависимость промежуточного программного обеспечения.

Например, обращение к приложению с неэкранированной % в запросе POST приводит к отображению шаблона Rack::ShowExceptions:

Пример недопустимого запроса POST:

POST /en/users/sign_in HTTP/1.1
Host: www.localhost.dev
Proxy-Connection: keep-alive
Content-Length: 1
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://www.localhost.dev
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8

%

Стойка промежуточного ПО:

$ RAILS_ENV=production rake middleware
use Raven::Rack
use HttpMethodNotAllowed
use ActionDispatch::SSL
use Rack::Sendfile
use ActionDispatch::Static
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007feba5b8b940>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use RequestStore::Middleware
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
use Warden::Manager
run MyApplication::Application.routes

У нас есть config.exceptions_add = self.routes в config/application.rb, если это важно.

Я довольно внимательно прочитал журнал изменений ActionPack, но вполне возможно, что эта проблема была исправлена ​​в более позднем выпуске! Если да, то буду очень признателен за ссылку на него.


person dleve123    schedule 24.11.2014    source источник


Ответы (2)


Если вы имеете в виду, что у вас есть config.exceptions_app = self.routes, не делайте этого. Вы возвращаете исключительное состояние обратно в приложение, которое вызвало это исключительное состояние, поэтому оно, скорее всего, не будет делать то, что вы хотите. Что не так с приложением с ошибкой по умолчанию?

person pixeltrix    schedule 25.11.2014

Убедитесь, что для RACK_ENV установлено рабочее значение, а также для RAILS_ENV.

Если RACK_ENV не установлен, по умолчанию используется разработка, и стойка сама загружает Rack::ShowExceptions (и некоторое другое промежуточное ПО для разработки) перед инициализацией Rails.

person John Leach    schedule 12.03.2015