我一直在config/environments/staging.rb
中使用以下内容来保护我的staging
环境:
# 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
的第三个参数('Staging'
)是什么?这个特定参数有什么含义?如果我想在production
中运行此代码(通过将其复制/粘贴到config/environments/production.rb
),我应该将此参数更改为'Production'
吗?如果我将其更改为'Fubar'
怎么办?
我尝试在docs和source code中查找,但这是无法解释的。另外,我发现它mentioned in a book,但解释充其量也很弱:
args参数是要传递给Rack过滤器的初始化方法的属性的可选散列。
答案 0 :(得分:2)
这只是Rack::Auth::Basic
中间件发送给浏览器的消息;看下面的截图:)
答案 1 :(得分:0)
关于args的更多一般细节:
正如文档中所述,它们是一个传递给中间件或过滤器的初始化器的数组,但是是否应该存在任何args及其含义取决于被调用的代码。
一个简单的人为例子是用于调试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
并在config / application.rb中我可以添加
config.middleware.insert_before Rack::Head, "MiddlewareDebugger", "1"
config.middleware.insert_before Rack::ConditionalGet, "MiddlewareDebugger", "2"
在Rack :: ConditionalGet
之前,它会在Rack :: Head和MiddlewareDebugger 1
之前记录字符串MiddlewareDebugger 2