我搜索了所有相关的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配置很新。
答案 0 :(得分:4)
好的我好像修好了。
基本上,由于我在远程服务器上有2个单独的存储库,我认为“git”用户失败了,因为我没有为git用户注册ssh密钥对。这就解释了为什么我的一个deploy.rb脚本工作正常,而这个脚本没有。
在我在问题中发布的链接中,其中一位评论者指出了这个问题:
注意如果,也会显示此错误 你正在使用多个github密钥 http://capistrano.lighthouseapp .... 你没有这些钥匙和一个 您的相应条目 你工作的工作站上的.ssh / config 从中运行部署。所以 ls-remote在本地运行。有没有 方法来引用存储库 github.com对此请求 远程部署使用 GIT中@ github上-PROJECT1:用户/ project1.git
另外,请参阅以下链接以获取更多详细信息,因为即使您不使用github,整个ssh问题也会适用。
答案 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"