Как настроить удаленные ссылки для git + capistrano 3 в развертывании ROR?

Я пытаюсь использовать capistrano (впервые) для развертывания моего приложения rails. Сначала самое необходимое, я использую:

  • рубин 1.9.3p362
  • Рельсы 3.2.13
  • рвм 1.24.7
  • Капистрано 3.0.1
  • Пассажир Phusion 4.0.26
  • Убунту 12.04 ЛТС

Я получаю следующую ошибку при попытке запустить cap production deploy

DEBUG [679a47be] фатальная ошибка: удаленный сервер не настроен для вывода списка ссылок.

Мой полный вывод cap production deploy приведен ниже

   INFO [488ba755] Running /usr/bin/env mkdir -p /tmp/AppName/ on sub.example.com
    DEBUG [488ba755] Command: /usr/bin/env mkdir -p /tmp/AppName/
     INFO [488ba755] Finished in 1.730 seconds with exit status 0 (successful).
    DEBUG Uploading /tmp/AppName/git-ssh.sh 0.0%
     INFO Uploading /tmp/AppName/git-ssh.sh 100.0%
     INFO [c895f068] Running /usr/bin/env chmod +x /tmp/AppName/git-ssh.sh on sub.example.com
    DEBUG [c895f068] Command: /usr/bin/env chmod +x /tmp/AppName/git-ssh.sh
     INFO [c895f068] Finished in 0.217 seconds with exit status 0 (successful).
    DEBUG [679a47be] Running /usr/bin/env git ls-remote  on sub.example.com
    DEBUG [679a47be] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/AppName/git-ssh.sh /usr/bin/env git ls-remote  )
    DEBUG [679a47be]  fatal: No remote configured to list refs from.
    DEBUG [679a47be] Finished in 1.775 seconds with exit status 128 (failed).

Gemfile

# Deploy with Capistrano
gem 'capistrano',  '~> 3.0.0'
gem 'capistrano-rails', '~> 1.1.0'
gem 'rvm1-capistrano3', require: false

Capfile

# Load DSL and Setup Up Stages
require 'capistrano/setup'

# Includes default deployment tasks
require 'capistrano/deploy'

# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

развернуть.rb

Я изменил этот файл, добавив свой URL-адрес git, имя приложения, путь deploy_to и задачи внутри task :restart, как указано для перезапуска Phusion Passenger.

set :application, 'AppName'
set :deploy_to, '/var/www/appname'

set :repository, "[email protected]:username/appname.git"  # Your clone URL
set :scm, "git"
set :user, "my-github-deploy-user"  # The server's user for deploys
set :scm_passphrase, "correct-password"  # The deploy user's password
set :branch, "master"
set :deploy_via, :remote_cache

# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }

set :ssh_options, {
   verbose: :debug
}

set :format, :pretty
set :log_level, :debug
# set :pty, true

set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

# set :default_env, { path: "/opt/ruby/bin:$PATH" }
# set :keep_releases, 5

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      execute :touch, release_path.join('tmp/restart.txt')
      # task :start do ; end
      # task :stop do ; end
      # task :restart, :roles => :app, :except => { :no_release => true } do
      #   run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
      # end
    end
  end

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      within release_path do
        execute :rake, 'cache:clear'
      end
    end
  end
  after :finishing, 'deploy:cleanup'
end

Я попытался включить всю необходимую информацию, пожалуйста, дайте мне знать, если есть что-то еще, что я могу добавить, спасибо за любую помощь, которую вы можете предоставить!


person Thomas    schedule 05.12.2013    source источник


Ответы (1)


В Capistrano 3 вы используете repo_url вместо repository

Итак, в вашем deploy.rb попробуйте заменить

set :repository, "[email protected]:username/appname.git"  # Your clone URL

с участием

set :repo_url, "https://github.com/username/appname.git"  # Your clone URL

Надеюсь, это поможет.

Обновление: для URL-адреса ssh требуется ключ; URL-адрес https не работает. Это сработало для меня.

person strivedi183    schedule 05.12.2013
comment
Спасибо, это помогло мне обойти эту ошибку и перейти к Permission denied (publickey).. Я подключился к своему серверу по ssh и прошел через help.github.com/articles/error-permission-denied-publickey, чтобы убедиться, что это было правильно на стороне git/github, и это было устранено как причина ошибки, это также проблема капистрано? - person Thomas; 06.12.2013
comment
Не уверен, что это проблема капистрано или нет, если честно, обычно я думаю, что эта ошибка возникает, когда ваш сервер не имеет доступа к github, и я думаю, что вы решили ее, по крайней мере, так, как я бы - person strivedi183; 10.12.2013
comment
FUUUUU*** CK да. Спасибо за помощь ман. Это сделало это для меня. Знаешь, сколько дней я работал над этим? Джайзуз. - person Nick Res; 25.03.2015
comment
Пожалуйста, проверьте обновленный ответ. URL-адрес https всегда имеет доступ только для чтения. - person jjmerelo; 26.09.2016
comment
@jjmerelo URL-адрес git не всегда будет иметь доступ только для чтения, если репо является частным. - person siannopollo; 11.11.2019