Capistrano - имя машины - PullRequest
       6

Capistrano - имя машины

4 голосов
/ 15 февраля 2011

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

namespace :log do
  desc "Get production log files"
  task :get_prod, :roles => :app do
    download("/home/user/myapp/shared/log/production.log", "log/production.log")
  end
end

Я хотел бы добавить какой-нибудь идентификатор к имени файла, чтобы он был уникальным, но я не уверен, что использовать? Есть ли переменная capistrano, которую я могу использовать?

1 Ответ

4 голосов
/ 15 февраля 2011

Да, есть специальная переменная, которую вы можете использовать.Эта переменная ("$ CAPISTRANO: HOST $") должна быть помещена в имя файла назначения.Capistrano будет интерполировать его с именем хоста, с которого он в данный момент передает файлы. *

Ваш код теперь будет выглядеть так:

namespace :log do
  desc "Get production log files"
  task :get_prod, :roles => :app do
    download("#{shared_path}/log/production.log", "log/production.$CAPISTRANO:HOST$.log")
  end
end

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


* Исходный код для интерполяции строк находится в строке 194 lib / capistrano / Transfer.rb (в Capistrano 2.5.19):

...
def normalize(argument, session)
  if argument.is_a?(String)
    argument.gsub(/\$CAPISTRANO:HOST\$/, session.xserver.host)
  elsif argument.respond_to?(:read)
...

Общий совет: если вы попытаетесь сначала найти что-то в интернете, а когда вы его там не найдете, то посмотрите в исходном коде (он не кусается ипозволяет узнать, как работает инструмент, с которым вы работаете).

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