如果您通过将 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.ruwith plain中做类似的事情。use如果您在use需要 Rails 应用程序的行之后添加该行,您仍然可以使用该Rails.root变量。