将参数传递给新的sinatra app

Ron*_*nze 20 ruby rack sinatra

简单的问题:我希望能够在config.ru中将选项传递到我的sinatra应用程序中.怎么可能?我的config.ru看起来像这样:

run MyApp
Run Code Online (Sandbox Code Playgroud)

但我想在我的MyApp类中使用它来获取参数:

class MyApp < Sinatra::Base
  def initialize(config)
    @config = config
  end
end
Run Code Online (Sandbox Code Playgroud)

但我无法想办法做到这一点.想法?

rni*_*son 24

  1. 使用设置/设置

    require 'sinatra/base'
    
    class MyApp < Sinatra::Base
      get '/' do
        settings.time_at_startup.to_s
      end
    end
    
    # Just arbitrarily picking time as it'll be static but, diff for each run.
    MyApp.set :time_at_startup, Time.now
    
    run MyApp
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用配置文件.请参阅contrib中的Sinatra :: ConfigFile(它也使用set和settings,但从YAML文件加载params)

  • 所以我不能以不同的方式配置单个应用程序的多个版本? (2认同)

Kas*_*bbe 5

如果你想用params配置,我发现你可以这样做:

require 'sinatra/base'

class AwesomeApp < Sinatra::Base
  def initialize(app = nil, params = {})
    super(app)
    @bootstrap = params.fetch(:bootstrap, false)
  end
end
Run Code Online (Sandbox Code Playgroud)