2014-01-03 6 views
7

Я хочу отметить текущий развернутый каталог с номером выпуска.Capistrano 3/SSHKit записать в файл в пользовательской задаче

Я попробовал этот подход:

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

namespace :deploy do 
    desc "Set a release number as the app version" 
    task :mark_release do 
    release_number = `git describe` 
     on roles(:web) do 
     execute("echo #{release_number} > #{current_path}/RELEASE") 
     end 
    end 
    end 

Проблема заключается в том, когда я запускаю это через:

cap deploy:mark_release 

команды выглядит следующим образом:

echo v9.3.0-254-g178d1f8; > /foo/bar/current/RELEASE 

точка с запятой делает проблемы. и мой файл RELEASE, конечно, пуст.

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

Любые подсказки?

+1

Вам нужно бежать номер версии с кавычки выполнить ("эхо \" # {release_number} \ "> # {current_path}/RELEASE") – dpa

ответ

4

мне это удалось:

1) Я взял номер выпуска из каталога репо на машине

2) Я написал его с потоком в файл с помощью загрузки! метод

namespace :deploy do 
desc "Set a release number as the app version" 
task :mark_release do 
    on roles(:web) do 
    within "/foo/bar/repo/" do 
     upload! StringIO.new(capture(:git, "describe")), "#{current_path}/RELEASE" 
    end 
    end 
end 
end 
3

Вот решение, с которым я столкнулся, для которого не требуется загрузка локального файла. Он переходит на путь репо для выполнения команды git для извлечения версии и затем перенаправляет вывод в файл. Затем файл может быть прочитан приложением Rails. Выполнение требует, чтобы различные параметры передавались отдельно. https://github.com/capistrano/sshkit#the-command-map имеет больше информации о карте команд и почему это необходимо из-за проблемы экранирования и пробелов.

namespace :deploy do 
    before :restart, :add_revision_file 
    task :add_revision_file do 
    on roles(:app) do 
     within repo_path do 
     execute(:git, :'rev-parse', :'--short', :'HEAD', ">#{release_path}/REVISION") 
     end 
    end 
    end 
end 
0

Использование SSHKit::Command

SSHKit::Command.new("echo #{release_number} > #{current_path}/RELEASE") 
Смежные вопросы