0

我一直在使用以下内容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'?

我尝试在文档源代码中查找此内容,但无法解释。另外,我发现它在一本书中提到,但解释充其量是薄弱的:

args 参数是一个可选的属性散列,用于传递给 Rack 过滤器的初始化方法。

4

2 回答 2

2

Rack::Auth::Basic就是中间件发给浏览器的简单消息;看看下面的截图:)

在此处输入图像描述

于 2014-01-09T20:24:06.043 回答
0

有关 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"

MiddlewareDebugger 1它会在 Rack::Head 和MiddlewareDebugger 2Rack::ConditionalGet 之前记录字符串

于 2015-12-07T20:23:32.590 回答