2010-02-19 2 views
18

Я пытаюсь сделать «развернуть: холодно» для своего приложения. Git repo является локальным для моего сервера развертывания (т. Е. У меня только один сервер для всего и я не размещаю свой код в github).Capistrano + Git: репозиторий локальный для производственного сервера

Вот транскрипт (заменил мое имя приложения с "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, "[email protected]:/home/mrichman/git/myapp.git" 

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

ssh: connect to host localhost port 22: Connection refused 

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

ответ

16

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

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

Так шахта

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

Кажется, работал. Просто запомните, чтобы затем удалить строку развертывания_via.

+0

теперь у меня есть следующие, которые также терпит неудачу: набор: хранилище, "Файл: ///var/git/myapp.git" набор: local_repository, "локальный: /var/git/myapp.git" выполняется локально: «git ls-remote localhost: /var/git/hireexchange.git master» ssh: подключиться к локальному хост-порту хоста 22: соединение отклонено –

+1

Вы работаете в одном окне? Если вы так выразились: local_repository, будет работать файл: //var/git/myapp.git. localhost следует заменить на любое имя хоста, с которого вы подключаетесь, с вашей предполагаемой удаленной рабочей станции. Также я обнаружил, что если у вас есть подмодули, у вас возникнут проблемы с развертыванием, например, так как модули настроены на удаленный URL. Очень раздражает, но может быть разрешено с помощью .ssh/config на вашем сервере под пользователем, который вы развертываете. – pmarsh

+1

Привет, ребята. Если это имеет какое-то значение, git на моем локальном и удаленном компьютере потребует разные пути, поэтому мне нужно установить: git_local/path/to/remote/git и установить: git/usr/bin/git (обратите внимание, что они не требуют ssh in начало). – btelles

1

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

Ls -LA /home/mrichman/git/myapp.git

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

+0

Я проверил, что мой Deploy пользователь имеет полный доступ на чтение /home/mrichman/git/myapp.git. Спасибо за комментарий. –

+0

Попробуйте войти в учетную запись развертывания и вручную введите неудачную команду: «git ls-remote /home/mrichman/git/myapp.git master», вероятно, вы получите ту же ошибку, и если это произойдет, войдите в систему как пользователь mrichman и попробовать его как этого пользователя. Если это все еще дает ошибку, которая, как я полагаю, произойдет, то вы захотите войти в «/ home/mrichman/git/myapp.git "и введите" git status ", и если это не удастся, вам нужно проверить, что содержимое этого каталога действительно содержит репозиторий git. – rwl4

+0

Когда я делаю' git ls-remote' либо как пользователь моего развертывания, либо мой собственный пользователь Я, кажется, получаю успех: 'aa30ffc814fffd96b168ffec7224aeb9fe9df161 \t refs/heads/master'. Я считаю, что статус git работает только с рабочими деревьями, а не с фактическим хранилищем. В качестве эксперимента я подтолкнул свое репо к Codaset, и мой 'cap deploy' отлично работает. Я могу (и, вероятно, должен) продолжать этот путь, так как небезопасно держать SCM на своем веб-сервере :) –

0

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

0

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

0

Если local_repository установлен, то Capistrano использует значение respository от сервера развертывания и значение local_respository с сервера развития. Or something like that.

Моя конфигурация работала следующим образом:

set :repository, "/home/#{user}/path/to/repo.git" 
set :local_repository, "myserver.com:path/to/repo.git" 
Смежные вопросы