【发布时间】:2015-01-12 22:41:48
【问题描述】:
我正在尝试编写一个 Capistrano 任务,该任务将“部署”我为伴随 Rails 项目而编写的私有 gem。
在config/deploy.rb
after :updating, :retrieve_my_gem
文件lib/capistrano/tasks/retrieve_my_gem.rake 包含...
desc 'Clones my_gem from Github to vendor/git'
task :retrieve_my_gem do
on roles(:app), in: :sequence do
# Create the directory that will contain my gem
gem_container_path = release_path.join('vendor/git')
debug "Gem container path: #{gem_container_path}"
if test "[ ! -d #{gem_container_path} ]"
info "Creating local gem directory"
execute 'mkdir', '-p', gem_container_path
end
gem_path = release_path.join('vendor/git/my_gem')
debug "Gem path: #{gem_path}"
if test "[ ! -d #{gem_path} ]"
within gem_container_path do
info "Cloning my gem to #{gem_path}"
execute 'git clone git@github.com:username/my_gem.git', gem_path
end
else
within gem_path do
info "Updating my gem in #{gem_path}"
execute 'git pull'
end
end
end
end
而Gemfile 有...
gem 'my_gem', :path => 'vendor/git/my_gem/'
当我运行部署任务时,gem_container_path 被创建,但它将 repo my_gem 克隆到 ~/my_gem 而不是 gem_container_path。部署任务继续并在尝试 bundle install 时失败,因为没有在 Gemfile 中指示的 'vendor/git/my_gem/' 中找到 'my_gem'。
我希望任务将 repo 克隆到 /var/www/project/releases/*/vendor/git/my_gem 其中 * 替换为 Capistrano 为 此 版本生成的日期时间戳.
为什么 Capistrano 将 repo 克隆到我的远程用户的主目录而不是指定路径?
【问题讨论】:
-
只是出于好奇?你能显示什么
gem_path的调试输出? (仅供参考。你有debug行错误。debug "Gem path: #{gem_container_path}") -
@PeteyT gem_path 是
/var/www/project/releases/20150112224830/vendor/git/my_gem -
git@github.username/my_gem.git怎么样了;那不应该是git@github.com:username/my_gem.git吗?只是想清除这里的错字。 -
@PeteyT 感谢您指出调试行!
-
@PeteyT RE:Git URL 是一个错字,我现在已经更正了。任务中不存在拼写错误,因为它成功将 repo 克隆到 ~/my_gem
标签: ruby-on-rails git capistrano