1

I'm running Rails 3.0.8 with Webrick webserver started in production mode with such command

RAILS_ENV=production rails server

I have a following problem.

I've read, that rails in production mode should handle all exceptions and errors. But I'm actually still having error message "ActiveRecord::RecordNotFound" when I'm trying to get unexisted item in production mode.

I've also read about

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

such hack, but I think that it isn't a Rails-way.

here's my production.rb file contents:

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

As you can see, it is quite usual.

Please, help me to solve this issue.

UPD:

I can also get following error

Routing Error

No route matches "/lol"

It's another type of exception, but the question is the same. What is the Best way to handle such situations?

Stanislav Mekhonoshin
  • 4,276
  • 2
  • 20
  • 25

1 Answers1

0

"I've read, that rails in production mode should handle all exceptions and errors."

This is incorrect, Rails doesn't catch exceptions per-se, but it's just that in production mode you have different ways to handle them.

The rescue_from method you wrote is absolutely correct.

Many Rails developers don't care about rescueing the RecordNotFound exception for the simple fact that, depending on the app, is the user that did something wrong.

There are apps however that likes to trap this exception and perform custom actions, such as redirects, rendering text or different views.

kain
  • 5,510
  • 3
  • 27
  • 36