From 39b576a31a7e973192f8b15a4fe067b5f1053cad Mon Sep 17 00:00:00 2001 From: Rodrigo Rosenfeld Rosas Date: Thu, 30 Jun 2016 14:37:39 -0300 Subject: Add an upgrade note related to ActionController::Live becoming a Concern See issue #25581: https://github.com/rails/rails/issues/25581 --- guides/source/upgrading_ruby_on_rails.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'guides/source') diff --git a/guides/source/upgrading_ruby_on_rails.md b/guides/source/upgrading_ruby_on_rails.md index 97d8cd392a..f276f64807 100644 --- a/guides/source/upgrading_ruby_on_rails.md +++ b/guides/source/upgrading_ruby_on_rails.md @@ -249,6 +249,35 @@ Rails.application.configure do end ``` +### `ActionController::Live` became a `Concern` + +That means that if your application used to have its own streaming module, the following code +would break in production mode: + +```ruby +# This is a work-around for streamed controllers performing authentication with Warden/Devise. +# See https://github.com/plataformatec/devise/issues/2332 +# Authenticating in the router is another solution as suggested in that issue +class StreamingSupport + include ActionController::Live # this won't work in production for Rails 5 + # extend ActiveSupport::Concern # unless you uncomment this line. + + def process(name) + super(name) + rescue ArgumentError => e + if e.message == 'uncaught throw :warden' + throw :warden + else + raise e + end + end +end +``` + +If you include `ActionController::Live` in another module that is included in your controller you +should also extend the module with `ActiveSupport::Concern`. Or you could use the `self.included` hook +to include `ActionController::Live` directly to the controller once the `StreamingSupport` is included. + ### New Framework Defaults #### Active Record `belongs_to` Required by Default Option -- cgit v1.2.3