GitHub Развертывание через Capistrano.Public Repo и SSH работают, а Private - нет - PullRequest
2 голосов
/ 19 августа 2011

Мне действительно нужна твоя помощь.У меня есть приложение Ruby on Rails на моей локальной машине, репозиторий на GitHub и сервер Ubuntu, на котором размещается приложение с Nginx.

У меня много времени был репозиторий, и развертывание через capistrano работалопросто хорошо.Теперь я преобразовал свой репозиторий в частный, и развертывание просто не работает.Когда я пытаюсь развернуть его, я получаю следующую ошибку:

  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "git ls-remote git://github.com/GIT_USER/APPLICATION.git master"
fatal: The remote end hung up unexpectedly
*** [deploy:update_code] rolling back
  * executing "rm -rf /var/www/APPLICATION/releases/DATE_OF_DEPLOY; true"
    servers: ["DOMAIN"]
    [DOMAIN] executing command
    command finished in 424ms

Итак, я предполагаю, что аутентификация не работает, но работает.Я скопировал свой открытый ключ на GitHub и могу даже SSH там.Я могу SSH с сервера на GitHub, и он говорит, что я успешно аутентифицирован.Я даже вижу, какой ключ работает.Но «git ls-remote [...]» не работает, и я не получаю информации, запустив его с трассировкой, кроме информации, которую я уже получил.

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

И это основная часть моего deploy.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))

require "rvm/capistrano" 
require 'bundler/capistrano'

default_run_options[:pty] = true

set :user, "DEPLOY_USER"
set :domain, "DOMAIN"
set :application, "APPLICATION"

set :repository, "git@github.com:GIT_USER/APPLICATION.git"
set :deploy_to, "/var/www/#{application}"
set :deploy_via, :remote_cache
set :scm, :git
set :git_account, "GIT_USER"
set :branch, "master"
set :git_shallow_clone, 1
set :scm_verbose, true
set :use_sudo, false
set :rvm_bin_path, "/usr/local/rvm/bin"
set :rvm_ruby_string, '1.9.2'
set :rvm_type, :user  # Don't use system-wide RVM
ssh_options[:port] = PORT_NUMBER
set :user, user
ssh_options[:keys] = %w(/home/DEPLOY_USER/.ssh/id_rsa)
set :ssh_options, { :forward_agent => true}

server domain, :app, :web

# Your HTTP server, Apache/etc
role :web, domain                         

# This may be the same as your `Web` server
role :app, domain                          

# This is where Rails migrations will run
role :db,  domain, :primary => true 

Извините, что эта вещьвыглядит так беспорядочно, но я попробовал тысячи подсказок, советов и учебных пособий.

Спасибо за любую помощь!

И, кстати: Да, все, что написано в Capslock, только для конфиденциальностипричины и, конечно же, не настоящие настройки, которые я использую.

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

Поскольку это теперь не общедоступное репо, вы должны использовать адрес git @ ....

Я вижу, у вас есть это в вашем файле deploy.rb, но ls-remote все еще выполняется в git: //...

Возможно, проблема в кешированной копии хранилища на вашем сервере. Проверьте правильность исходного адреса в файле shared / cached-copy / .git / config. Вы должны иметь git @ ... вместо git: // ... there

2 голосов
/ 19 августа 2011

Мне кажется, что у меня была похожая проблема с развертыванием с использованием частного репозитория github.Я не думаю, что мы когда-либо вполне выяснили причину проблемы, но в конце я думаю, что мы решили проблему с помощью ssh-add для добавления ключа github в ssh-agent - возможно, стоит попробовать

1 голос
/ 29 июля 2012

для частных репозиториев вы должны использовать стиль https:

set :repository,  "https://github.com/git_name/repo_name.git"

.. но вы должны вводить имя пользователя и пароль дважды при каждом развертывании! поэтому я пишу небольшой Expect-скрипт, чтобы сделать это для меня

посмотрите на эту сущность

.. или как прохождение:

1 - создать файл в вашем домашнем каталоге ($ cat> ~ / git_cap)

#!/usr/bin/expect -f
# Expect script to supply username/password to cap deploy to git private repository
# This script needs username and password as arguments to connect to git server:
# ------------------------------------------------------------------------
# ./git_cap gituser gitpwd
# -------------------------------------------------------------------------
# set Variables
set g_user [lrange $argv 0 0] 
set g_pwd [lrange $argv 1 1]   
set timeout -1   

spawn cap deploy
match_max 100000

# Look for user prompt
expect "*?sername:*"
send -- "$g_user\r"
send -- "\r"

# Look for passwod prompt
expect "*?assword:*"
send -- "$g_pwd\r"
send -- "\r"

# Look for user prompt
expect "*?sername:*"
send -- "$g_user\r"
send -- "\r"

# Look for passwod prompt
expect "*?assword:*"
send -- "$g_pwd\r"
send -- "\r"

expect eof

2 - сделать его исполняемым

$ chmod 755 ~/git_cap
$ chmod +x ~/git_cap

3 - добавить псевдоним в ваш .profile / .bashrc .. (необязательно)

alias gcap='~/git_cap gitname gitpwd'

4 - добавьте свой sudo-pwd в deploy.rb или расширите сценарий ожидания для sudo-pwd

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

5 - развернуть с помощью gcap

rails_root$ gcap
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...