2017-01-09 14 views
3

Я использую Capistrano (3.7.1) для развертывания приложения Rails 5 в VPS. У меня есть 2 основных филиала, которые я использую в git: master, для стабильного, готового к производству кода и develop, для кода WIP. Я хотел развернуть ветвь develop на промежуточном сервере, но, похоже, он не работает.Capistrano не может разворачиваться из не-ведущей ветки

В deploy.rb:

# This is the failing task 
task :check_revision do 
    on roles(:app) do 
    unless 'git rev-parse HEAD' == "git rev-parse origin/#{fetch(:branch)}" 
     puts "WARNING: HEAD is not the same as origin/#{fetch(:branch)}" 
     puts 'Run `git push` to sync changes.' 
     exit 
    end 
    end 
end 

В production.rb:

set :branch, 'master' 

В staging.rb:

set :branch, 'develop' 

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

$ cap staging deploy 
... initial steps, skipped over ... 
WARNING: HEAD is not the same as origin/develop 
Run `git push` to sync changes. 

Но это явно не тот случай, когда я получаю:

$ git rev-parse HEAD 
38e4a194271780246391cf3977352cb7cb13fc86 
$ git rev-parse origin/develop 
38e4a194271780246391cf3977352cb7cb13fc86 

, которые являются явно то же самое.

Что происходит?

+0

Измените строку на это и попробуйте: 'if \' git rev-parse HEAD \ '== \' git rev-parse origin/# {fetch (: branch)} \ '' – Deep

ответ

2

Вы пишете команды, которые должны выполняться на раковине в одинарные кавычки, которые рубин лечит, как String:

unless 'git rev-parse HEAD' == 'git rev-parse origin/#{fetch(:branch)}' 

вместо из этого:

unless `git rev-parse HEAD` == `git rev-parse origin/#{fetch(:branch)}` 

также можно использовать:

unless %x{git rev-parse HEAD} == %x{git rev-parse origin/#{fetch(:branch)}} 

%x также возвращает стандартный вывод запуска ЦМД в субоболочке.

0

Используйте обратные кавычки для выполнения git команд в скрипте:

# This is the failing task 
task :check_revision do 
    on roles(:app) do 
    unless `git rev-parse HEAD` == `git rev-parse origin/#{fetch(:branch)}` 
     puts "WARNING: HEAD is not the same as origin/#{fetch(:branch)}" 
     puts 'Run `git push` to sync changes.' 
     exit 
    end 
    end 
end