如果您通过将 Sinatra 应用程序添加为中间件将其包含在 Rails 应用程序中,那么您可以将构造函数添加到配置它的应用程序中。Sinatra 有一个遵循通用 Rack 中间件接口的initialize
方法,第一个参数是要向其传递请求的应用程序。通过在您的子类中覆盖它,您可以执行任何需要的配置。
例如,在您的 Sinatra 应用程序中:
def initialize(app, config_file)
super(app)
data = YAML.load_file(config_file)
settings.foo = data['name']
end
为了使调用settings.foo
起作用,您需要foo
在配置块中设置默认值,因为initialize
方法在类实例的范围内运行并且无权访问该set
方法:
configure do
set :foo, nil
end
现在你可以像这样添加中间件application.rb
(或者任何你想添加的地方):
config.middleware.use MyApp, File.join(Rails.root, "config/foo_settings.yaml")
如果你想在 Rails 应用程序之外安装 Sinatra 应用程序,你可以在你的config.ru
with plain中做类似的事情。use
如果您在use
需要 Rails 应用程序的行之后添加该行,您仍然可以使用该Rails.root
变量。