2014-01-09 2 views
0

Я использую следующий в config/environments/staging.rb сохранить свою staging среды частным:Что такое третий аргумент config.middleware.insert_before?

# HTTP Basic Authentication 
if ENV['AUTH_BASIC_ON'] == 'true' 
    config.middleware.insert_before(ActionDispatch::Static, 'Rack::Auth::Basic', 'Staging') do |username, password| 
    [username, password] == [ENV.fetch('AUTH_BASIC_USERNAME'), ENV.fetch('AUTH_BASIC_PASSWORD')] 
    end 
end 

Что такое config.middleware.insert_before «s третьего аргумента ('Staging')? Какое значение имеет данный параметр? Если я хочу запустить этот код в production (путем копирования/вставки его в config/environments/production.rb), должен ли я изменить этот параметр на 'Production'? Что, если я изменю его на 'Fubar'?

Я попытался найти это в docs и source code, но это необъяснимо. Кроме того, я нашел это mentioned in a book, но объяснение в лучшем случае слабое:

Параметр args является необязательным хэшем атрибутов для перехода к методу инициализации вашего фильтра стойки.

ответ

2

Это просто сообщение, отправленное в браузер с помощью промежуточного программного обеспечения Rack::Auth::Basic; Посмотрите на скриншоте ниже :)

enter image description here

0

Более подробно о общем в аргументах:

Как указано в документации, они массив передается инициализатору промежуточного или фильтра, но есть ли должны быть любые аргументы, а их смысл зависит от вызываемого кода.

Простого надуманного примера является промежуточным слоем для отладки приложения Rails:

class MiddlewareDebugger 
    def initialize(app, *args) 
    @app = app 
    @args = args 
    end 

    def call(env) 
    Rails.logger.debug "MiddlewareDebugger #{@args.first}" 
    status, headers, body = @app.call(env) 
    [status, headers, body] 
    end 
end 

и в конфигурации/application.rb я мог бы добавить

config.middleware.insert_before Rack::Head, "MiddlewareDebugger", "1" 
config.middleware.insert_before Rack::ConditionalGet, "MiddlewareDebugger", "2" 

Было бы войти строку MiddlewareDebugger 1 перед тем Rack: : Голова и MiddlewareDebugger 2 перед стойкой :: ConditionalGet

Смежные вопросы