Capistrano 任务 git 克隆私有 gem
Capistrano task git clone private gem
我正在尝试编写一个 Capistrano 任务,它将 'deploy' 一个私有的 gem 我写来伴随一个 Rails 项目。
在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'。
我期待将回购克隆到 /var/www/project/releases/*/vendor/git/my_gem 的任务,其中 * 替换为 Capistrano 为 this 生成的日期时间戳发布。
为什么 Capistrano 将 repo 克隆到我的远程用户的主目录而不是指定的路径?
问题是我的执行语句:
execute 'git clone git@github.com:username/my_gem.git', gem_path
我改成了
execute "git clone git@github.com:username/my_gem.git #{gem_path}"
现在一切正常。
我正在尝试编写一个 Capistrano 任务,它将 'deploy' 一个私有的 gem 我写来伴随一个 Rails 项目。
在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'。
我期待将回购克隆到 /var/www/project/releases/*/vendor/git/my_gem 的任务,其中 * 替换为 Capistrano 为 this 生成的日期时间戳发布。
为什么 Capistrano 将 repo 克隆到我的远程用户的主目录而不是指定的路径?
问题是我的执行语句:
execute 'git clone git@github.com:username/my_gem.git', gem_path
我改成了
execute "git clone git@github.com:username/my_gem.git #{gem_path}"
现在一切正常。