【问题标题】:Sinatra - Overriding Rack ClassesSinatra - 覆盖机架类
【发布时间】:2013-03-14 08:07:52
【问题描述】:

我有一个小型 Sinatra 项目,我需要覆盖 Rack::Auth::Basic#valid?。目前我已将此覆盖放在我的应用程序的主文件中,但随着事情变得越来越大,这似乎使源代码变得混乱......

require "sinatra/base"

module Rack::Auth
  class Basic
    def valid?(auth)
      # My overrides go here...
    end
  end
end

class App < Sinatra::Base
  use Rack::Auth::Basic, "CustomRealm" do |username, password|
    # Authentication
  end

  get "/" do
    erb :index
  end
end

我想将覆盖移动到外部文件。我的项目结构类似于

* views
|------ index.erb
* config.ru
* app.rb
* README.md
* LICENSE.md
* Gemfile
* Gemfile.lock

我可以在哪里移动 Rack::Auth 覆盖,以便我可以从 app.rb 内部使用它们?我曾尝试将它们放在lib/rack/auth/basic.rb 上,但这根本不起作用...... Sinatra 对此的标准是什么?

【问题讨论】:

    标签: ruby sinatra rack


    【解决方案1】:

    我不相信 Sinatra 对此有“标准”。但这应该不难做到。

    您可以做的最简单的事情是创建一个rack_overrides.rb 并从您的app.rb 中要求它。

    Sinatra 不具备自动加载等功能(就像 Rails 那样),因此它不会神奇地从 lib/ 或其他目录中获取内容。

    哦,只是出于好奇:为什么需要覆盖 Rack::Auth::Basic#valid?

    【讨论】:

    • +1。作为替代方案,我会将代码放在 lib/rack/auth.rb 中,因为如果 Rack 不是外部库,你会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2017-10-04
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2012-06-22
    相关资源
    最近更新 更多