Скрытие всех сообщений об исключениях - PullRequest
1 голос
/ 18 июля 2011

Я запускаю Rails 3.0.8 с веб-сервером Webrick, запущенным в производственном режиме с такой командой

RAILS_ENV=production rails server

У меня следующая проблема.

Я прочитал, что рельсы вПроизводственный режим должен обрабатывать все исключения и ошибки.Но на самом деле у меня все еще появляется сообщение об ошибке «ActiveRecord :: RecordNotFound», когда я пытаюсь получить несуществующий элемент в производственном режиме.

Я также читал о

rescue_from ActiveRecord::RecordNotFound, :with => :page_not_found

такиххак, но я думаю, что это не Rails-way.

вот мое содержимое файла production.rb:

BeerPub::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # The production environment is meant for finished, "live" apps.
  # Code is not reloaded between requests
  config.cache_classes = true
  config.whiny_nils = false

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_view.debug_rjs             = false
  config.action_controller.perform_caching = true

  # Specifies the header that your server uses for sending files
  config.action_dispatch.x_sendfile_header = "X-Sendfile"

  # For nginx:
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

  # If you have no front-end server that supports something like X-Sendfile,
  # just comment this out and Rails will serve the files

  # See everything in the log (default is :info)
  # config.log_level = :debug

  # Use a different logger for distributed setups
  # config.logger = SyslogLogger.new

  # Use a different cache store in production
  # config.cache_store = :mem_cache_store

  # Disable Rails's static asset server
  # In production, Apache or nginx will already do this
  config.serve_static_assets = true

  # Enable serving of images, stylesheets, and javascripts from an asset server
  # config.action_controller.asset_host = "http://assets.example.com"

  # Disable delivery errors, bad email addresses will be ignored
  # config.action_mailer.raise_delivery_errors = false

  # Enable threaded mode
  # config.threadsafe!

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners
  config.active_support.deprecation = :notify
end

Как видите, это довольно обычно.

Пожалуйста, помогите мне решить эту проблему.

UPD:

Я также могу получить следующую ошибку

Routing Error

No route matches "/lol"

Это другой тип исключения, новопрос тот же.Как лучше всего справляться с такими ситуациями?

1 Ответ

0 голосов
/ 18 июля 2011

«Я читал, что рельсы в рабочем режиме должны обрабатывать все исключения и ошибки.»

Это неверно, Rails не перехватывает исключений как таковых, но просто в рабочем режиме у вас есть разные способы их обработки.

Метод rescue_from, который вы написали, абсолютно верен.

Многим разработчикам Rails не нужно спасать исключение RecordNotFound из-за того простого факта, что в зависимости от приложения пользователь сделал что-то не так.

Однако существуют приложения, которым нравится перехватывать это исключение и выполнять пользовательские действия, такие как перенаправления, отображение текста или другие представления.

...