Настройки Синатры (Рубин) - PullRequest
       3

Настройки Синатры (Рубин)

2 голосов
/ 06 апреля 2010

Используя Sinatra в Ruby, вы можете установить настройки сервера, выполнив:

set :myvariable, "MyValue"

и затем получить доступ к нему в любом месте в шаблонах и т. Д. С помощью settings.myvariable.

В моем сценарии мне нужнобыть в состоянии переустановить эти переменные, возвращаясь к куче значений по умолчанию.Я подумал, что самый простой способ сделать это - иметь функцию, которая выполняет все вызовы set, вызывающие ее в начале сервера Sinatra, и когда мне нужно внести изменения:

class MyApp < Sinatra::Application
  helpers do
    def set_settings
      s = settings_from_yaml()
      set :myvariable, s['MyVariable'] || "default"
    end
  end

  # Here I would expect to be able to do:
  set_settings()
  # But the function isn't found!

  get '/my_path' do
    if things_go_right
      set_settings
    end
  end
  # Etc
end

Какобъясненный в коде выше, функция set_settings не найдена, я поступаю неправильно?

1 Ответ

5 голосов
/ 06 апреля 2010

Вы пытаетесь вызвать set_settings() внутри class scope MyApp, но метод helper, который вы использовали для его определения, определяет его только для использования внутри этого блока get... do...end.

Если вы хотите, чтобы set_settings() был доступен статически (во время загрузки класса, а не во время обработки запроса), вам нужно определить его как метод класса:

class MyApp < Sinatra::Application

  def self.set_settings
    s = settings_from_yaml()
    set :myvariable, s['MyVariable'] || "default"
  end

  set_settings

  get '/my_path' do
    # can't use set_settings here now b/c it's a class
    # method, not a helper method. You can, however,
    # do MyApp.set_settings, but the settings will already
    # be set for this request.
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...