Развертывание:символическая ссылка на capistrano указывает текущий каталог на предыдущую версию

Я использую capistrano для развертывания своего проекта Ruby on Rails. Я нахожусь на Dreamhost VPS, и несколько недель назад, без смены капистрано или пассажира, я начал испытывать странную проблему с развертыванием:

Каждый раз, когда capistrano развертывает мое приложение, все идет правильно, кроме deploy:symlink (который вызывается по умолчанию), который должен указывать «текущий» каталог на новейшую версию. Несмотря на то, что новая версия правильно развернута в каталоге «релизы», проблема заключается в том, что «текущая» символическая ссылка всегда устанавливается на предыдущую версию, а не на новую. Таким образом, я могу развертывать приложения, но мне всегда приходится запускать развертывание два раза подряд.

Журнал capistrano можно посмотреть здесь: http://img715.imageshack.us/img715/7803/capistranoproblemb.png

Кто-нибудь еще сталкивался с этим раньше или может помочь мне решить эту проблему?

Спасибо!


person foresth    schedule 29.06.2010    source источник


Ответы (2)


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


namespace :deploy do
  desc "Recreate symlink"
  task :resymlink, :roles => :app do
    run "rm -f #{current_path} && ln -s #{release_path} #{current_path}"
  end
end

after "deploy:create_symlink", "deploy:resymlink", "deploy:update_crontab"
person foresth    schedule 22.07.2010
comment
В последнем Capistrano это deploy:create_symlink вместо deploy:symlink. - person manafire; 11.10.2012
comment
Пожалуйста, измените принятый ответ на тот, который дал @knocte. Кладж выше может работать, но это запах кода. - person JellicleCat; 12.03.2014
comment
@JellicleCat: какую версию капистрано вы используете? - person knocte; 21.09.2016
comment
@knocte: у меня больше нет доступа к рассматриваемой рабочей станции, но я предполагаю, что это была версия 2.X. - person JellicleCat; 21.09.2016

Я думаю, что ответ @foresth не является хорошим решением.

Я думаю, что вы столкнулись с этой ужасной ошибкой capistrano.

Способ обхода ошибки следующий: НЕ ЧИТАЙТЕ ПЕРЕМЕННУЮ latest_release ПОКА НЕ ПРОИЗОЙДЕТ ЗАДАЧА deploy.

person knocte    schedule 16.04.2013
comment
Это должен быть принятый ответ. Настройка моих пользовательских задач в соответствии с этой ошибкой решила проблему. - person brendan; 01.11.2013
comment
@brendan: с какой версией capistrano вы воспроизвели ошибку? они спрашивают меня, что в выпуске github я связал... - person knocte; 05.11.2013
comment
Похоже, это была версия 2.15.4 @knocte - person brendan; 16.11.2013
comment
@brendan: спасибо, а вы можете воспроизвести это с 3.x? - person knocte; 16.11.2013
comment
Я случайно сталкиваюсь с этой проблемой в 3.x, но я вообще не использую переменную last_release. Ответ Foresth может быть запахом кода, но это единственный способ, которым я могу в настоящее время убедиться, что мои символические ссылки верны при каждом развертывании. - person Jose Rafael Santiago Jr.; 11.03.2016
comment
@JoseRafaelSantiagoJr: да, я думаю, мой ответ больше относился к версии 2.x capistrano, когда-то - person knocte; 11.03.2016