Передать аргументы в новое приложение sinatra - PullRequest
20 голосов
/ 11 марта 2012

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

run MyApp

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

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

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

Ответы [ 3 ]

24 голосов
/ 11 марта 2012
  1. Использование набор / настройки

    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
    
  2. Использовать файл конфигурации. См. Sinatra :: ConfigFile в contrib (который также использует набор и настройки, но загружает параметры из файла YAML)

5 голосов
/ 15 июля 2013

Если вы хотите настроить параметры, я понял, что вы можете сделать это:

require 'sinatra/base'

class AwesomeApp < Sinatra::Base
  def initialize(app = nil, params = {})
    super(app)
    @bootstrap = params.fetch(:bootstrap, false)
  end
end
1 голос
/ 08 апреля 2015

ответ 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
...