Как мне «скопировать, если не существует более поздней версии» в Capistrano? - PullRequest
0 голосов
/ 12 января 2009

Я хочу защитить свой файл database.yml, не допуская его контроля версий. Таким образом, в моем рецепте развертывания Capistrano есть две задачи:

task :copy_db_config do
  # copy local config file if it exists and is more
  # recent than the remote one
end

task :symlink_db_config do
  run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end

Можете ли вы помочь заполнить первое задание?

Ответы [ 2 ]

0 голосов
/ 28 августа 2009

У меня была такая же проблема, но я подошел к ней по-другому. Может быть, это будет полезно.

Задача установки копирует database.yml.example в database.yml. Задача развертывания не затрагивает database.yml. У меня есть отдельные задачи для изменения имен базы данных, имен пользователей и паролей. Вот пример:

desc "Change the database name"
task :change_db_database, :roles => :app do
  database = prompt('Enter new database name: ')
  run <<-CMD
    cd #{shared_path}/config &&
    perl -i -pe '$env = $1 if /^(\\w+)/; s/database:.*/database: #{database}/ if $env eq "#{ENV['CONNECTION'] || ENV['TARGET']}"' database.yml
  CMD
end

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

0 голосов
/ 14 января 2009

У меня нет действующего кода для вас здесь и сейчас, но ..

Вы можете использовать местную метку времени с помощью ruby. Класс файла имеет функцию ctime, которая позволяет узнать, когда она была изменена.

Запустите ту же команду на серверах database.yml

Если локальная версия самая новая, у capistrano есть метод для безопасной загрузки

upload("products.txt", "/home/medined", :via => :scp)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...