Как создать файл конфигурации для нескольких сред в Ruby? - PullRequest
1 голос
/ 22 марта 2011

Я не хочу вас смущать, поэтому я хочу сделать следующее:

У меня есть три окружения:

www.env1.com
www.env2.com
www.env3.com

Я хочу создать что-то для определения фазы установки в соответствии со средой, в которой я хочу запускать сценарии, а именно:

Текущая настройка:

def setup
  @verification_errors = []
  @selenium = Selenium::Client::Driver.new(
    :host => "localhost",
    :port => 4444,
    :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    :url => "www.env1.com",
    :timeout_in_second => 60
  )

  @selenium.start_new_browser_session
end

Что я хочу:

def setup
  @verification_errors = []
  @selenium = Selenium::Client::Driver.new( 
    :host => "localhost",
    :port => 4444,
    :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    **:url => This parameter configurable from a file or other source.**
    :timeout_in_second => 60
  )

  @selenium.start_new_browser_session
end

Если это возможно, я могу переключать среды без необходимости переписывать все контрольные примеры.

Надеюсь, вы мне поможете, мне действительно нужно это сделать.

1 Ответ

3 голосов
/ 23 марта 2011

YAML - отличный язык сериализации данных для обработки информации о конфигурации. поставляется с Ruby , поэтому вам нужно всего лишь:

require 'yaml'

, чтобы загрузить его, затем что-то вроде:

configuration = YAML::load_file('path/to/yamldata.yaml')

Все ваши данные конфигурации будут доступны внутри переменной configuration.

Обычно я создаю заглушку для своих файлов YAML, написав некоторый код Ruby, определив хэш конфигурации, в котором он содержится, и сообщив YAML, что нужно сгенерировать файл для меня. См. Документы для load_file и dump, чтобы узнать, как это сделать.

Для чего-то вроде того, что вы делаете, я бы создал хеш вроде:

configuration = {
  'env1' => "www.env1.com",
  'env2' => "www.env2.com",
  'env3' => "www.env3.com",
}

Использование YAML :: dump (configuration) возвращает:

--- 
env1: www.env1.com
env2: www.env2.com
env3: www.env3.com

, который вы хотите записать в файл .yaml, затем загрузить позже во время выполнения и получить к нему доступ:

@selenium = Selenium::Client::Driver.new( 
  :host => "localhost",
  :port => 4444,
  :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
  :timeout_in_second => 60
  :url => configuration['env1'],
)

Вы можете заменить 'env1' другими клавишами для использования env2 или env3.

Rails использует YAML, чтобы один файл обрабатывал информацию о разработке, тестировании и производстве приложения. На работе я использую его, чтобы делать аналогичные вещи, где один файл содержит информацию о наших средах разработки и производства для приложений, а также определения некоторых хэшей, которые мы должны поддерживать, но не хотим изменять код для этого.

...