Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
vidibus-routing_error
Advanced tools
Catches ActionController::RoutingError which does not work with Rails 3 out of the box. It basically catches the exception on Rack-level and re-raises it on application-level.
This gem is part of Vidibus, an open source toolset for building distributed (video) applications.
In most cases it will be sufficient to add a catch-all route. But don't put
it just at the end of routes.rb
because that will disable all routes defined
by gems your application uses. Instead, append the route in application.rb
:
module PutYourApplicationNameHere
class Application < Rails::Application
# Catch 404s
config.after_initialize do |app|
app.routes.append{match '*path', :to => 'application#rescue_404'}
end
end
end
If that won't work for any reason, you may still use this gem. :)
Since Rails 3 is based on Rack, catching a 404 error in your Application controller does not work as expected. The underlying problem is discussed here.
Add the dependency to the Gemfile of your application:
gem 'vidibus-routing_error'
Then call bundle install on your console.
With this gem installed, you are able to handle errors like in past versions of Rails:
class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, :with => :rescue_404
def rescue_404
# do something
# IMPORTANT: If you modify this method, you have to restart the server.
end
end
Keep in mind that you have to restart your server when changing the rescue-method!
This gem implants the middleware Vidibus::RoutingError::Rack
into your Rails stack
right after ActionDispatch::ShowExceptions
which returns a 404 response if no
matching route was found for the current request.
Vidibus::RoutingError::Rack
catches the 404 status and redirects internally to the route
'/routing_error'
which is provided by this gem.
Through this route the method RoutingErrorController#rescue
gets called which then raises
an ActionController::RoutingError
on application level so you can rescue this error.
If you want to handle the error in a specific controller, you can also route the path
'/routing_error'
in routes.rb
to it:
match 'routing_error' => 'my_controller#rescue_404'
The failing URI will be available in the environment variable:
env['vidibus-routing_error.request_uri']
If your application has a catch-route in routes.rb
, this gem won't work, because
routes provided by engines will be added after any existing routes. If you don't
need a catch-all route for other purposes than rescuing from routing errors, you can
savely remove it.
Depending on the structure of your application, you might get an error in development like this:
TypeError (User can't be referred)
This error is caused by some caching-reloading madness: The middleware implanted by this gem is cached. But in development, your classes usually aren't. Thus some classes may not be available under certain circumstances, e.g. if you are using before filters for user authentication provided by some engine. You should be able to get rid of the error above by turning on class caching. Try it (and restart the server afterwards):
# development.rb
config.cache_classes = true
If the error is gone, you're lucky as I am. But since it is not feasible to cache classes in development, turn off class caching again and explicitly require the class that couldn't be referred. In my case, it's the user class:
# top of development.rb
require 'app/models/user'
© 2010-2012 Andre Pankratz. See LICENSE for details.
The development of this gem was sponsored by Käuferportal: http://www.kaeuferportal.de
FAQs
Unknown package
We found that vidibus-routing_error demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.