Каков наилучший способ хранения информации о конфигурации конкретного проекта в задачах ruby ​​Rake? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть грабли для получения производственной базы данных с удаленного сервера и т. Д. Это всегда одни и те же задачи, но информация о сервере меняется для каждого проекта.У меня есть код здесь: https://gist.github.com/868423 В последнем задании я получаю ошибку @local_db_dir_path = nil.

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

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Вставьте настройки в файл YAML и прочитайте его так:

require 'yaml'
config = YAML.load("config.yaml") # or wherever

$remote_host = config['remote_host']
$ssh_username = config['ssh_username']
# and so on

Или вы можете просто прочитать один большой хэш конфигурации:

$config = YAML.load("config.yaml")

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

config.yaml будет выглядеть так:

--- 
remote_host: some.host.name
ssh_username: myusername
other_setting: foo
whatever: bar

Я, как правило, сохраняю config.yaml.sample с основной частью кода, в которой есть пример, но нерабочие настройки для всего, что я могу скопировать в не версионный config.yaml Некоторым людям нравится сохранять свой config.yaml в активной ветке на самом сервере, чтобы он был версионным, но я никогда не беспокоился об этом.

0 голосов
/ 17 марта 2011

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

task :development do
  server "development.host"
end

task :backup do
  run "cd #{current_path}; rake db:dump"
  download "remote_path", "local_path"
end

и вызываться так:

cap development backup
...