简单问题:我希望能够在config.ru中将选项传递到我的sinatra应用程序中。怎么可能?我的config.ru看起来像这样:
run MyApp
但是我希望在我的MyApp类中使用它来获取参数:
class MyApp < Sinatra::Base
def initialize(config)
@config = config
end
end
但我无法想办法做到这一点。想法?
答案 0 :(得分:24)
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
使用配置文件。请参阅contrib中的Sinatra::ConfigFile(也使用set和settings,但从YAML文件加载params)
答案 1 :(得分:5)
如果你想配置params,我发现你可以这样做:
require 'sinatra/base'
class AwesomeApp < Sinatra::Base
def initialize(app = nil, params = {})
super(app)
@bootstrap = params.fetch(:bootstrap, false)
end
end
答案 2 :(得分:1)
rnicholson's response将是最佳答案,但如果您想要访问路线中的实例变量,则可以使用before
过滤器进行设置,如Sinatra README:
在与路由相同的上下文中的每个请求之前评估过滤器之前,可以修改请求和响应。过滤器中设置的实例变量可通过路径和模板访问:
before do @note = 'Hi!' request.path_info = '/foo/bar/baz' end get '/foo/*' do @note #=> 'Hi!' params['splat'] #=> 'bar/baz' end