简体   繁体   English

Capistrano在git上部署失败:检查

[英]Capistrano deploy failing on git:check

Trying to deploy a Rails app on an EC2 instance with Puma/Nginx/Capistrano. 尝试使用Puma / Nginx / Capistrano在EC2实例上部署Rails应用程序。 I was following this tutorial. 我正在学习本教程。

This is my first deploy, not sure what exactly is going on. 这是我的第一次部署,不确定到底发生了什么。 Seems like there is an issue with my ssh configuration, judging from the console output, but what exactly I'm really not sure any help would be greatly appreciated. 从控制台输出来看,似乎我的ssh配置存在问题,但究竟是什么我真的不确定任何帮助将不胜感激。

Here's the deploy.rb 这是deploy.rb

server '52.206.222.73', roles: %w{web app db}, primary: true

set :repo_url,        'git@example.com:username/myapp.git'
set :application,     'myapp'
set :user,            'deploy'
set :puma_threads,    [4, 16] 
set :puma_workers,    0   

# Don't change these unless you know what you're doing
set :pty,             true
set :use_sudo,        false
set :stage,           :production
set :deploy_via,      :remote_cache
set :deploy_to,       "/home/#{fetch(:user)}/#{fetch(:application)}"
set :puma_bind,       "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"
set :puma_state,      "#{shared_path}/tmp/pids/puma.state"
set :puma_pid,        "#{shared_path}/tmp/pids/puma.pid"
set :puma_access_log, "#{release_path}/log/puma.error.log"
set :puma_error_log,  "#{release_path}/log/puma.access.log"
set :ssh_options,     { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
set :puma_preload_app, true
set :puma_worker_timeout, nil 
set :puma_init_active_record, true  # Change to false when not using ActiveRecord

## Defaults:
# set :scm,           :git
# set :branch,        :master
# set :format,        :pretty
# set :log_level,     :debug
# set :keep_releases, 5

## Linked Files & Directories (Default None):
# set :linked_files, %w{config/database.yml}
# set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end 
  end   

And output from cap production deploy --trace 从cap生产部署输出--trace

** Execute git:wrapper
    00:00 git:wrapper
          01 mkdir -p /tmp
        ✔ 01 deploy@52.206.222.73 0.695s
          Uploading /tmp/git-ssh-myapp-production-adam.sh 100.0%
          02 chmod 700 /tmp/git-ssh-myapp-production-adam.sh
        ✔ 02 deploy@52.206.222.73 0.921s
    ** Execute git:check
    00:04 git:check
          01 git ls-remote --heads git@example.com:username/amharic-web.git
    cap aborted!
    SSHKit::Runner::ExecuteError: Exception while executing as deploy@52.206.222.73: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
    SSHKit::Command::Failed: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/command.rb:100:in `exit_status='
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/netssh.rb:148:in `execute_command'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `tap'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:74:in `execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/git.rb:10:in `git'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/git.rb:20:in `check'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/tasks/git.rake:34:in `block (4 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:93:in `with'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/tasks/git.rake:33:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:29:in `run'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
    Tasks: TOP => git:check
    The deploy has failed with an error: Exception while executing as deploy@52.206.222.73: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    ** Invoke deploy:failed (first_time)
    ** Execute deploy:failed

    ** DEPLOY FAILED
    ** Refer to log/capistrano.log for details. Here are the last 20 lines:

     DEBUG [34726536]   -
     DEBUG [34726536]   .
     DEBUG [34726536]   |
     DEBUG [34726536]   /
     DEBUG [34726536]   -
     DEBUG [34726536]   \
     DEBUG [34726536]   .\
     DEBUG [34726536]   .
     DEBUG [34726536]   ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
     DEBUG [34726536] Finished in 1.755 seconds with exit status 0 (successful).
      INFO [2219decf] Running /usr/bin/env mkdir -p /tmp as deploy@52.206.222.73
     DEBUG [2219decf] Command: /usr/bin/env mkdir -p /tmp
      INFO [2219decf] Finished in 0.695 seconds with exit status 0 (successful).
     DEBUG Uploading /tmp/git-ssh-myapp-production-adam.sh 0.0%
      INFO Uploading /tmp/git-ssh-myapp-production-adam.sh 100.0%
      INFO [38c56cdb] Running /usr/bin/env chmod 700 /tmp/git-ssh-myapp-production-adam.sh as deploy@52.206.222.73
     DEBUG [38c56cdb] Command: /usr/bin/env chmod 700 /tmp/git-ssh-myapp-production-adam.sh
      INFO [38c56cdb] Finished in 0.921 seconds with exit status 0 (successful).
      INFO [4ce4f406] Running /usr/bin/env git ls-remote --heads git@example.com:username/amharic-web.git as deploy@52.206.222.73
     DEBUG [4ce4f406] Command: ( export GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-myapp-production-adam.sh" ; /usr/bin/env git ls-remote --heads git@example.com:username/amharic-web.git )*

Run these 2 commands to grant git access via your system 运行这两个命令以通过您的系统授予git访问权限

eval ssh-agent
ssh-add ~/.ssh/id_rsa

These commands are assuming that you have ssh key over the remote git server(bitbucket/github/other) 这些命令假设您在远程git服务器上有ssh密钥(bitbucket / github / other)

I'm surprised there isn't a more descriptive error message from Git. 我很惊讶Git没有更具描述性的错误信息。 However, the git ls-remote command is failing for some reason. 但是,由于某种原因, git ls-remote命令失败。 In absence of any error message, the best guess is that Git cannot access the remote repository. 在没有任何错误消息的情况下,最好的猜测是Git无法访问远程存储库。

This could be because: 这可能是因为:

  • The Git repository URL you've provided is incorrect (double check there are no typos); 您提供的Git存储库URL不正确(仔细检查没有拼写错误); or 要么
  • Your SSH agent is not being forwarded; 您的SSH代理未被转发; or 要么
  • Your SSH identity is not allowed to access the specified repository 您的SSH身份不允许访问指定的存储库

On your local machine (ie where you ran the cap command), try manually running the same Git command via SSH and see what happens: 在本地计算机上(即运行cap命令的位置),尝试通过SSH手动运行相同的Git命令,看看会发生什么:

ssh -A -i ~/.ssh/id_rsa.pub deploy@52.206.222.73 git ls-remote --heads git@example.com:username/amharic-web.git

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM