Capistrano和Git,毁了我的生命。 “无法解决存储库中[HEAD]的修订...”

时间:2009-12-23 10:05:54

标签: ruby-on-rails git deployment ssh capistrano

我搜索了所有相关的Capistrano问题,但找不到任何东西,甚至在这里为我阐明了什么。

git version 1.6.4.2
Capistrano v2.5.10

基本上,当我运行我的cap deploy.rb脚本时,它连接到服务器,开始执行deploy:update任务,然后在deploy:update_code任务中:

    *** [deploy:update_code] rolling back
  * executing "rm -rf /home/user_name/public_html/project_name/releases/20091223094358; true"
    servers: ["project_name.com"]

失败并出现以下错误:

/Library/Ruby/Gems/1.8/gems/capistrano-2.5.10/lib/capistrano/recipes/deploy/scm/git.rb:231:in `query_revision': Unable to resolve revision for 'master' on repository 'ssh://git@slice_ip:path_to_git_repository'. (RuntimeError)

这是我的部署脚本,我尝试过包括并省略:

set:branch'master'

我也只是认为我的存储库路径已经关闭,但我已经尝试了几乎所有的排列(绝对的,不是绝对的,.git后缀,没有后缀)。在我指向的路径上肯定有一个简单的git存储库。

**我确实在一个切片上托管了多个项目。其他项目也是一个rails项目,但正在运行SVN。 Capistrano部署工作正常。

任何正确方向的指示或任何想法都有助于减少我计划做的饮酒量,如果我无法弄明白的话。 (路径/ IP混淆,不要破坏我兄弟!)

set :application, "project1"
set :user, "username"
set :repository,  "ssh://git@67.24.9.133/home/git/project1.git"
set :branch, "master" 

set :port, 696969

set :deploy_to, "/home/username/public_html/#{application}"

set :scm, :git

role :app, application                    
role :web, application                    
role :db,  application, :primary => true 

# deployment via remote client (workstation)
set :deploy_via, :copy 
set :runner, user

# mod_rails
namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end
end

这是最相关的帖子(甚至非常相关),但我无法弄清楚他们说的修复是什么。我对git / capistrano配置很新。

https://capistrano.lighthouseapp.com/projects/8716/tickets/56-query_revision-unable-to-resolve-revision-for-head-on-repository

5 个答案:

答案 0 :(得分:4)

好的我好像修好了。

基本上,由于我在远程服务器上有2个单独的存储库,我认为“git”用户失败了,因为我没有为git用户注册ssh密钥对。这就解释了为什么我的一个deploy.rb脚本工作正常,而这个脚本没有。

在我在问题中发布的链接中,其中一位评论者指出了这个问题:

https://capistrano.lighthouseapp.com/projects/8716/tickets/56-query%5Frevision-unable-to-resolve-revision-for-head-on-repository

  

注意如果,也会显示此错误   你正在使用多个github密钥   http://capistrano.lighthouseapp ....   你没有这些钥匙和一个   您的相应条目   你工作的工作站上的.ssh / config   从中运行部署。所以   ls-remote在本地运行。有没有   方法来引用存储库   github.com对此请求   远程部署使用   GIT中@ github上-PROJECT1:用户/ project1.git

另外,请参阅以下链接以获取更多详细信息,因为即使您不使用github,整个ssh问题也会适用。

http://github.com/guides/multiple-github-accounts

答案 1 :(得分:1)

您的工作站和服务器都必须能够在指定的地址访问存储库,否则您可能必须将:local_repository设置为从工作站访问它的方式,以及:存储库是服务器应该访问的方式它

答案 2 :(得分:0)

对我来说,使用Git进行Capistrano部署似乎只在设置set :copy_cache, true

时有效

答案 3 :(得分:0)

我只使用了一次带有git的capistrano,但从未在存储库定义中使用过或看过使用过ssh://。

尝试使用set :repository, "git@67.24.9.133/home/git/project1.git"代替

答案 4 :(得分:0)

确保您正在部署的分支存在。

set :branch, "upgrade-to-2013.4.3"

不等于

set :branch, "upgrade-to-2013.3.4"