Подтвердить что ты не робот

Передача аргументов в новое приложение для синатры

Простой вопрос: я хочу иметь возможность передавать параметры в мое приложение synatra в config.ru. Как это возможно? Мой config.ru выглядит так:

run MyApp

Но я хочу, чтобы это в моем классе MyApp принимало аргументы:

class MyApp < Sinatra::Base
  def initialize(config)
    @config = config
  end
end

Но я не могу понять, как это сделать. Идеи?

4b9b3361

Ответ 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