Передача аргументов в новое приложение для синатры
Простой вопрос: я хочу иметь возможность передавать параметры в мое приложение synatra в config.ru. Как это возможно? Мой config.ru выглядит так:
run MyApp
Но я хочу, чтобы это в моем классе MyApp принимало аргументы:
class MyApp < Sinatra::Base
def initialize(config)
@config = config
end
end
Но я не могу понять, как это сделать. Идеи?
Ответы
Ответ 1
-
Используйте set/settings
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
-
Используйте файл конфигурации. См. Sinatra:: ConfigFile в contrib (который также использует набор и настройки, но загружает параметры из файла YAML)
Ответ 2
Если вы хотите настроить с помощью параметров, я понял, что вы можете сделать это:
require 'sinatra/base'
class AwesomeApp < Sinatra::Base
def initialize(app = nil, params = {})
super(app)
@bootstrap = params.fetch(:bootstrap, false)
end
end
Ответ 3
ответ rnicholson будет лучшим ответом в большинстве случаев, но если вы хотите получить доступ к переменной экземпляра на ваших маршрутах, вы можете установить их используя фильтр before
, как описано в Sinatra README:
Прежде чем фильтры будут оцениваться перед каждым запросом в том же контексте, что и маршруты, и могут изменять запрос и ответ. Переменные экземпляра, установленные в фильтрах, доступны по маршрутам и шаблонам:
before do
@note = 'Hi!'
request.path_info = '/foo/bar/baz'
end
get '/foo/*' do
@note #=> 'Hi!'
params['splat'] #=> 'bar/baz'
end