module AnyCable::Rails::Rack

Rack middleware stack to modify the HTTP request object.

AnyCable Websocket server does not use Rack middleware processing mechanism (which Rails uses when Action Cable is mounted into the main app).

Some middlewares could enhance request env with useful information.

For instance, consider the Rails session middleware: it's responsible for restoring the session data from cookies.

AnyCable adds session middelware by default to its own stack.

You can also use any Rack/Rails middleware you want. For example, to enable Devise/Warden you can add the following code to an initializer or any other configuration file:

AnyCable::Rails::Rack.middleware.use Warden::Manager do |config|
  Devise.warden_config = config
end

Public Class Methods

app() click to toggle source
# File lib/anycable/rails/rack.rb, line 45
def self.app
  @rack_app || app_build_lock.synchronize do
    @rack_app ||= default_middleware_stack.yield_self do |stack|
                    middleware.merge_into(stack)
                  end.yield_self do |stack|
      stack.build { [-1, {}, []] }
    end
  end
end
app_build_lock() click to toggle source
# File lib/anycable/rails/rack.rb, line 27
def self.app_build_lock
  @app_build_lock
end
default_middleware_stack() click to toggle source
# File lib/anycable/rails/rack.rb, line 37
def self.default_middleware_stack
  config = ::Rails.application.config

  ActionDispatch::MiddlewareStack.new do |middleware|
    middleware.use(config.session_store, config.session_options) if config.session_store
  end
end
middleware() click to toggle source
# File lib/anycable/rails/rack.rb, line 33
def self.middleware
  @middleware ||= ::Rails::Configuration::MiddlewareStackProxy.new
end