Путь назначения Capistrano уже существует, а не пустой каталог

#ruby-on-rails #capistrano #capistrano3

#ruby-on-rails #capistrano #capistrano3

Вопрос:

При развертывании приложения Rails с Capistrano в Ubuntu 14.04 я получаю следующую ошибку:

 fatal: destination path '/var/www/APP-NAME/repo' already exists and is not an empty directory.


cf5a389e] Running /usr/bin/env [ -f /var/www/rd/repo/HEAD ] on LINODE-INSTANCE-IP
DEBUG[cf5a389e] Command: [ -f /var/www/rd/repo/HEAD ]
DEBUG[cf5a389e] Finished in 0.005 seconds with exit status 1 (failed).
DEBUG[8899b95c] Running /usr/bin/env if test ! -d /var/www/rd; then echo "Directory does not exist '/var/www/rd'" 1>amp;2; false; fi on LINODE-INSTANCE-IP
DEBUG[8899b95c] Command: if test ! -d /var/www/rd; then echo "Directory does not exist '/var/www/rd'" 1>amp;2; false; fi
DEBUG[8899b95c] Finished in 0.005 seconds with exit status 0 (successful).
INFO[fc5f524b] Running /usr/bin/env git clone --mirror GIT_REPO_URL /var/www/APP-NAME/repo on LINODE-INSTANCE-IP
DEBUG[fc5f524b] Command: cd /var/www/APP-NAME amp;amp; ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rd/git-ssh.sh /usr/bin/env git clone --mirror GIT-REPO-URL /var/www/APP-NAME/repo )
DEBUG[fc5f524b] fatal: destination path '/var/www/APP-NAME/repo' already exists and is not an empty directory.
  

Вот файлы конфигурации:

Единственная причина этой ошибки, которую я могу найти в Интернете, это;

один и тот же хост в нескольких ролях, так что они участвуют в гонках? Например, я имею в виду, что у вас может быть один и тот же IP-адрес, определенный как хост роли:app более одного раза.

Который, я полагаю, не соответствует приведенным выше файлам конфигурации.

Ответ №1:

У меня была та же проблема. Причина в двойном определении роли и / или сервера. Попробуйте удалить

 server 'SERVER-IP', user: 'USERNAME', roles: %w{app}
  

в production.rb и

 role :app, "SERVER-IP"
  

в deploy.rb. Последний кажется простым синтаксисом, в то время как первый — расширенный, поэтому вы фактически объявляете роли дважды (точнее, три раза: 2 в production.rb и 1 в deploy.rb). Надеюсь, это поможет.

Комментарии:

1. Спасибо @leger. Я удалил вышеуказанные 2 строки, но ошибка по-прежнему сохраняется при развертывании. Хотя я думаю, что сейчас я на правильном пути, застрял на нем в течение последних 3 часов.

2. Попробуйте удалить APP-NAME на сервере через rm -rf и повторно развернуть. Я запускал все свои итерации таким образом, пока развертывание не завершится успешно. Иногда с sudo reboot помощью 🙂

3. Это сделало это для меня. Менял развертывание с svn на git. Просто необходимо удалить существующий каталог ‘repo’ (старый кэш репозитория svn). После этого все хорошо. 🙂

Ответ №2:

В соответствующей заметке я столкнулся с этой проблемой при изменении настройки файла подключений к БД в одном из моих развертываний.

В этом случае в старой структуре был один общий файл для настроек БД, а в новой — два. Несмотря на то, что они были объявлены в рецепте, я получал ошибки при автоматическом удалении старых сборок.

Чтобы решить проблему, я просто удалил старые сборки и cap [server name] deploy несколько раз запускал их, чтобы очистить их и убедиться, что это больше не происходит. До сих пор все было хорошо.