使用Capistrano部署Rails应用程序 - “错误:未找到存储库”。

时间:2015-05-17 01:53:26

标签: ruby-on-rails capistrano capistrano3

我在使用Capistrano将Rails应用程序部署到EC2实例时遇到问题。我正在为我的笔记本电脑上的工作开发新的应用程序。我有两个Github帐户(个人和工作)。我试图添加我的个人公钥,但Github拒绝了,因为我的个人Github帐户已经与之关联。因此,我的笔记本电脑上有两套私钥/公钥。

我将工作公钥(~/.ssh/work_rsa.pub)添加到我的工作Github帐户。我在Github组织(称为WorkOrg)下创建了一个新的私有存储库,我的工作是Github帐户所拥有的(我是该组织中的管理员用户)。

然后我必须创建一个别名,以便git在推送到Github时会使用我的工作私钥。这是~/.ssh/config看起来的样子:

# work account
Host github.com-work
   HostName github.com
   User git
   IdentityFile ~/.ssh/work_rsa

然后,我必须将远程原始网址更改为:git@github.com-work:WorkOrg/work_reports.git,这样我就可以运行$ git push,而无需每次都提供我的用户名和密码信息。所以,我现在可以在我的笔记本电脑上推送/拉动这个新的仓库(work_reports)。

我还设置了一个EC2实例(ubuntu 14.04)并创建了一个我可以通过SSH连接的用户deploy(使用相同的~/.ssh/work_rsa密钥)。我将work_rsa复制到/home/deploy/.ssh/work_rsa,以便我可以从该EC2实例中推/拉。

我现在准备使用Capistrano为我的EC2实例设置自动部署。当我运行$ cap production deploy:check --trace时,它会失败:

INFO [bb69f764] Running /usr/bin/env chmod +x /tmp/work_reports/git-ssh.sh as deploy@xx.xxx.xxx.xxx
DEBUG [bb69f764] Command: ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 /usr/bin/env chmod +x /tmp/work_reports/git-ssh.sh )
INFO [bb69f764] Finished in 0.046 seconds with exit status 0 (successful).
** Execute git:check
DEBUG [943f7c42] Running /usr/bin/env git ls-remote -h git@github.com:WorkOrg/work_reports.git as deploy@xx.xxx.xxx.xxx 
DEBUG [943f7c42] Command: ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/work_reports/git-ssh.sh /usr/bin/env git ls-remote -h git@github.com:WorkOrg/work_reports.git )
DEBUG [943f7c42] Error: Repository not found.
DEBUG [943f7c42]    fatal: Could not read from remote repository.
DEBUG [943f7c42]    
DEBUG [943f7c42]    Please make sure you have the correct access rights
DEBUG [943f7c42]    and the repository exists.

这是我的Capfile

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rbenv'
set :rbenv_type, :user 
set :rbenv_ruby, '2.2.2'

这是我的/config/deploy.rb文件:

lock '3.2.1'
set :application, 'work_reports'
set :deploy_user, 'deploy'
set :scm, :git
#set :repo_url, 'git@github.com-work:WorkOrg/work_reports.git'
set :repo_url, 'git@github.com:WorkOrg/work_reports.git'
set :branch, ENV['REVISION'] || ENV['BRANCH'] || "master"
set :ssh_options, { forward_agent: true, paranoid: true, keys: "~/.ssh/work_rsa" }
set :deploy_to, '/home/deploy/work_reports'
set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, 'deploy:restart'
  after :finishing, 'deploy:cleanup'
end

这是我的/config/deploy/production.rb文件:

set :stage, :production
server 'xx.xxx.xxx.xxx', user: 'deploy', roles: %w{web app db}

我甚至尝试在set :repo_url, 'git@github.com-work:WorkOrg/work_reports.git'文件中使用别名远程源url(deploy.rb),但我也遇到了同样的错误。

我有没有正确配置,以便我可以使用Capistrano将我的Rails应用程序部署到EC2?

2 个答案:

答案 0 :(得分:1)

我必须更改我的/config/deploy.rb文件,以便Capistrano实际使用work_rsa私钥:

set :ssh_options, { forward_agent: false, paranoid: true, keys: "~/.ssh/work_rsa" }

答案 1 :(得分:0)

这里的火车晚了。

我的问题原来是改变了回购品名称。当我连接到服务器,然后更改位于/to/project/repo/config的git config中的repo URI时,这已得到修复。

奇怪的是,这只发生在Travis CI版本中。此外,使用capistrano-ssh-doctor检查时没问题。