Capistrano + Git: репозиторий, локальный для рабочего сервера

Я пытаюсь выполнить «развертывание: холодно» для своего приложения. Репозиторий git является локальным для моего сервера развертывания (т. е. у меня есть только один сервер для всего, и я не размещаю свой код на github).

Вот стенограмма (имя моего приложения заменено на «myapp» для конфиденциальности)

  * executing `deploy:cold'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "git ls-remote /home/mrichman/git/myapp.git master"
fatal: '/home/mrichman/git/myapp.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
*** [deploy:update_code] rolling back
  * executing "rm -rf /var/www/myapp.com/releases/20100218203108; true"
    servers: ["myapp.com"]
Password:
    [myapp.com] executing command
    command finished
Command git ls-remote /home/mrichman/git/myapp.git master returned status code 32768

Вот мой файл deploy.rb: http://pastie.org/831424

я тоже пробовал

set :repository, "deploy@localhost:/home/mrichman/git/myapp.git"

но это дает мне

ssh: connect to host localhost port 22: Connection refused

Любые идеи приветствуются.


person Mark Richman    schedule 19.02.2010    source источник


Ответы (5)


Только что столкнулся с той же проблемой. Ключ в том, чтобы не использовать копию deploy_via, а установить :local_repository

Это должно быть установлено на URL-адрес, который вы используете для доступа к репозиторию с вашего компьютера/ноутбука для разработки.

Так у моего есть

set :repository, "file:///srv/git/myapp.git"
set :local_repository, "nameOfHostFromSSHConfig:/srv/git/myapp.git"

Кажется, сработало. Только не забудьте затем удалить строку копирования deploy_via.

person pmarsh    schedule 28.02.2010
comment
Теперь у меня есть следующее, что также не работает: set:repository, file:///var/git/myapp.git set:local_repository, localhost:/var/git/myapp.git, выполняющийся локально: git ls-remote localhost:/ var/git/hireexchange.git master ssh: подключиться к локальному порту хоста 22: соединение отклонено - person Mark Richman; 28.02.2010
comment
Вы разрабатываете на той же коробке? Если вы, я думаю, :local_repository, file://var/git/myapp.git будет работать. localhost следует заменить любым именем хоста, к которому вы подключаетесь с предполагаемой удаленной рабочей станции. Также я обнаружил, что если у вас есть подмодули, вы столкнетесь с большим количеством проблем при таком развертывании, потому что модули настроены так, чтобы они указывали на удаленный URL-адрес. Очень раздражает, но это можно решить с помощью .ssh/config на вашем сервере под пользователем, которого вы развертываете. - person pmarsh; 28.02.2010
comment
Привет, ребята. Если это имеет какое-то значение, git на моем локальном и удаленном компьютере требовал разных путей, поэтому мне нужно было установить: git_local /path/to/remote/git и установить: git /usr/bin/git (обратите внимание, что для этого не требуется ssh в начало). - person btelles; 12.05.2010
comment
Я использовал set :repository, "/home/#{user}/path/to/repo.git" вместо строки file:///..., и это сработало как по волшебству! Спасибо - person mraaroncruz; 19.10.2010
comment
В Capistrano 3 замените :repository на :repo_url. :local_repository кажется ненужным, по крайней мере, для меня. - person RussK; 13.03.2015
comment
@RussK, не могли бы вы поделиться всей настройкой, пожалуйста? не могу найти ничего, что сработает. - person lakesare; 23.10.2015

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

ls -la /home/mrichman/git/myapp.git

Если вы получаете сообщение об ошибке «Отказано в доступе», вам необходимо убедиться, что вы установили разрешения для вложенных каталогов репозитория, которые разрешают сценарию развертывания доступ к файлам.

person rwl4    schedule 19.02.2010
comment
Я проверил, что мой пользователь развертывания имеет полный доступ для чтения к /home/mrichman/git/myapp.git. Спасибо за комментарий. - person Mark Richman; 19.02.2010
comment
Попробуйте войти в учетную запись пользователя deploy и ввести неудачную команду вручную: git ls-remote /home/mrichman/git/myapp.git master, это, вероятно, даст вам ту же ошибку, и если это произойдет, войдите в систему как mrichman user и попробуйте от имени этого пользователя. Если это все еще дает ошибку, которая, я уверен, произойдет, вам нужно будет перейти в каталог /home/mrichman/git/myapp.git и ввести git status, и если это не удастся, вам нужно будет проверить, что содержимое этого каталога действительно содержит репозиторий git. - person rwl4; 20.02.2010
comment
Когда я делаю git ls-remote либо как мой пользователь развертывания, либо как мой собственный пользователь, я получаю успех: aa30ffc814fffd96b168ffec7224aeb9fe9df161 refs/heads/master. Я считаю, что git status работает только с рабочими деревьями, а не с самим репозиторием. В качестве эксперимента я отправил свой репозиторий в Codaset, и мой cap deploy отлично работает таким образом. Я могу (и, вероятно, должен) продолжать в том же духе, так как хранить SCM на их веб-сервере небезопасно :) - person Mark Richman; 20.02.2010
comment
Я только что столкнулся с этой проблемой, потому что запускал cap deploy:update как sudo. Мой локальный пользователь мог правильно запустить git ls-remote, но sudo git ls-remote выдавал ту же ошибку. В конце концов я выяснил, что у моего локального пользователя были правильные ключи ssh для удаленного репозитория git, а у root — нет. - person rancidfishbreath; 07.08.2012

Убедитесь, что вы написали правильный репозиторий git, соблюдая регистрозависимость! (Я столкнулся с той же проблемой, она только что решилась)

person mustafaturan    schedule 04.03.2012

Моя проблема на самом деле была связана с проблемой известных хостов. Все, что мне нужно было сделать, это убедиться, что удаленный сервер git находится на моих известных хостах (при первой попытке подключиться к нему по SSH вам будет предложено добавить это самостоятельно), и это сработало как шарм.

person Ben Kreeger    schedule 22.08.2012

Если установлено local_repository, то Capistrano использует значение respository с сервера развертывания и значение local_respository с сервера разработки. Или что-то в этом роде.

Моя конфигурация работала так:

set :repository, "/home/#{user}/path/to/repo.git"
set :local_repository, "myserver.com:path/to/repo.git"
person Fletcher Moore    schedule 13.11.2012