Розгортання Capistrano не вдається після того, як я змінив URL-адресу сховища


75

У мене є просте розгортання через capistrano зі сховища Git. Спочатку я розгортав форму GitHub, все працювало чудово. Але потім я перемістив своє сховище до BitBucket і зараз отримую

fatal: Could not parse object '9cfb...'.

Проблема зникає після того, як я змінився

set :deploy_via, :remote_cache

до

set :deploy_via, :copy

але це не вирішує проблему, вона лише обходить її. Чи можу я якось сказати capistrano просто скинути старий кеш?

Відповіді:


45

Потрібно сказати, що я не впевнений, оскільки я не зміг перевірити це, але це повинно спрацювати:

cap deploy:cleanup -s keep_releases=0

Оскільки він стирає кожен випуск (кеш) із сервера.

Очевидно, вам також потрібно буде видалити shared/cached-copy, тому що, здається, це не було очищено за допомогою виклику Capistrano вище відповідно до коментаря нижче.


65
Це не вирішило проблему повністю, але як тільки я видалив shared/cached-copy, вона зараз розгортається просто чудово.
Якуб Арнольд

Це не спрацювало і для мене, але коментар Якуба тут.
JD.

5
Ви можете просто змінити віддалену URL-адресу походження на нову адресу репо в shared/cached-copyкаталозі.
нуль

2
відповідь лише на видалення всіх випусків на сервері (включаючи поточні). Найкраща відповідь (якщо у вас активний віддалений кеш) - це відповідь Якуба Арнольда.
eveevans

7
З Capistrano 3 вам доведеться видалити /repoзамість shared/cached-copy. Редагувати: Дивіться відповідь Джастіна Таннера
csch

106

Капістрано 2.Х

Видаліть і повторно клонуйте репо за новою адресою:

cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://git@example.org/new/repo.git cached-copy

Змініть свій, config/deploy.rbщоб використовувати новий репо:

set :repository, "ssh://git@example.org/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache

Розгортання ще раз:

cap deploy

Капістрано 3.X

  1. Видаліть $deploy_to/repoкаталог
  2. Змініть свій config/deploy.rb(так само, як 2.X)
  3. cap deploy

5
Я б сказав, що це краща відповідь. Якщо ви видалите всі випуски, ви по суті в поганому стані, якщо ваше нове розгортання не вдасться, і ви не зможете повернутися назад. Я також думаю, що варто зазначити, що клонування репо вручну потрібно лише для додавання хоста до відомих хостів. Якщо його вже додано, то розгортання буде працювати (тож по суті те саме, що і при першій установці capistrano, перевірка репо в будь-якому місці працює лише для того, щоб його додати)
Кенні Леврін,

@ KennyLövrin так, клонування репо в будь-якому місці призведе до того, що ваш хост потрапить до відомих хостів, але якщо ви :remove_cacheвстановили, вам потрібно щось у каталозі кешованої копії, інакше capistrano не розгорнеться.
Джастін Таннер

7
Майте на увазі, що capistrano 3.1 використовує shared/repoзамість цього, shared/cached-copyтому ця відповідь, хоча і майже правильна, повинна бути оновлена.
Fred Oliveira

4
У capistrano 3.2.1 я вирішив видалити $deploy_to/repoпапку, оскільки не можу знайти жодної repoпапки в shared.
Roxas Shadow

1
Це краща відповідь
Бретцький,

15

Капістрано 2 і нижче

SSH на ваш сервер і оновіть репо в ./shared/cached-copy/.git/configпапці розгортання, або просто видаліть./shared/cached-copy

Капістрано 3 і вище

SSH на ваш сервер і оновіть репо в ./repo/configпапці розгортання.

Перевірте Виправлення розгортань Capistrano 3 після зміни сховища


1
приємне рішення. припустимо, що ./repo/config-> path_to_your_repo/repo/config(на початку незрозуміло)
mmike

6

Я вирішив це наступним чином у deploy.rb:

namespace :deploy do
  task :cope_with_git_repo_relocation do
    run "if [ -d #{shared_path}/cached-copy ]; then cd #{shared_path}/cached-copy && git remote set-url origin #{repository}; else true; fi"
  end
end
before "deploy:update_code", "deploy:cope_with_git_repo_relocation"

Це робить розгортання трохи повільнішими, тому його варто видалити, коли вам буде зручно, що всі ваші цілі розгортання наздогнали.


3

Ви повинні змінити GIT походження у вашій загальної / кешованих копіювання / папки

cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin git@bitbucket.org:/origin.git

спробуй розгорнути виробництво


0

Найпростіший спосіб - це просто зміна URL-адреси репо на нову в .git / config у каталозі shared / cached-copy на веб-сервері. Тоді ви можете зробити звичайне розгортання, як зазвичай.



0

Якщо вам потрібно зробити багато репо, ви можете додати завдання для нього.

Для capistrano 3 ви додаєте це завдання у свій файл deploy.rb

desc "remove remote git cache repository"
  task :remove_git_cache_repo do
      on roles(:all) do
    execute "cd #{fetch(:deploy_to)} && rm -Rf repo"
  end
end

А потім запустіть один раз для кожного етапу:

cap testing remove_git_cache_repo

0

Ось версія Capistrano 3, про яку говорить ця відповідь . Може бути нудно робити те, що пропонує відповідь на кожному сервері.

Тож киньте це, deploy.rbа потім біжітьcap <environment> deploy:fix_repo_origin

namespace :deploy do
  desc 'Fix repo origin, for use when changing git repo URLs'
  task :fix_repo_origin do
    on roles(:web) do
      within repo_path do
        execute(:git, "remote set-url origin #{repo_url}")
      end
    end
  end
end

-1

Для Capistrano 3.0+

  1. Змініть URL-адресу сховища у вашому config / deploy.rb

  2. Змініть URL-адресу сховища у файлі your_project / repo / config на сервері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.