diff options
author | Genadi Samokovarov <gsamokovarov@gmail.com> | 2018-12-25 16:35:15 +0200 |
---|---|---|
committer | Genadi Samokovarov <gsamokovarov@gmail.com> | 2019-04-19 14:14:06 +0900 |
commit | 45f1c7a3e16437e517baa6606674f7bbb16dba74 (patch) | |
tree | 62fb0c46cd72368c2b8806c43612e809b45996a5 /actionpack/lib/action_dispatch/middleware/debug_exceptions.rb | |
parent | 16dae7684edc480ee3fe65dfff8e19989402c987 (diff) | |
download | rails-45f1c7a3e16437e517baa6606674f7bbb16dba74.tar.gz rails-45f1c7a3e16437e517baa6606674f7bbb16dba74.tar.bz2 rails-45f1c7a3e16437e517baa6606674f7bbb16dba74.zip |
Introduce Actionable Errors
Actionable errors let's you dispatch actions from Rails' error pages. This
can help you save time if you have a clear action for the resolution of
common development errors.
The de-facto example are pending migrations. Every time pending migrations
are found, a middleware raises an error. With actionable errors, you can
run the migrations right from the error page. Other examples include Rails
plugins that need to run a rake task to setup themselves. They can now
raise actionable errors to run the setup straight from the error pages.
Here is how to define an actionable error:
```ruby
class PendingMigrationError < MigrationError #:nodoc:
include ActiveSupport::ActionableError
action "Run pending migrations" do
ActiveRecord::Tasks::DatabaseTasks.migrate
end
end
```
To make an error actionable, include the `ActiveSupport::ActionableError`
module and invoke the `action` class macro to define the action. An action
needs a name and a procedure to execute. The name is shown as the name of a
button on the error pages. Once clicked, it will invoke the given
procedure.
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/debug_exceptions.rb')
-rw-r--r-- | actionpack/lib/action_dispatch/middleware/debug_exceptions.rb | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb b/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb index 59113e13f4..a679f9bf01 100644 --- a/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb +++ b/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb @@ -4,6 +4,8 @@ require "action_dispatch/http/request" require "action_dispatch/middleware/exception_wrapper" require "action_dispatch/routing/inspector" +require "active_support/actionable_error" + require "action_view" require "action_view/base" @@ -19,7 +21,7 @@ module ActionDispatch end def initialize(app, routes_app = nil, response_format = :default, interceptors = self.class.interceptors) - @app = app + @app = ActionableExceptions.new(app) @routes_app = routes_app @response_format = response_format @interceptors = interceptors |