【问题标题】:What is the third argument to config.middleware.insert_before?config.middleware.insert_before 的第三个参数是什么?
【发布时间】:2014-01-09 20:06:30
【问题描述】:

我一直在 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'呢?

我尝试在docssource code 中查找此内容,但无法解释。另外,我找到了它mentioned in a book,但解释充其量是薄弱的:

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

【问题讨论】:

    标签: ruby-on-rails http-authentication rack-middleware


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      关于参数的更多一般细节:

      如文档中所述,它们是传递给中间件或过滤器的初始化程序的数组,但是否应该有任何参数,以及它们的含义,取决于被调用的代码。

      一个简单的人为示例是用于调试 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::Head 之前记录字符串 MiddlewareDebugger 1,在 Rack::ConditionalGet 之前记录MiddlewareDebugger 2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 2020-12-26
        • 2012-05-10
        • 1970-01-01
        相关资源
        最近更新 更多