在使用capistrano命令进行部署时,如何避免在共享bundle文件夹下使用多个gem。大多数时候,当我将一个gem从一个版本迁移到另一个版本时,共享的bundle文件夹仍然包含这两个版本,这会导致问题。我们应该如何避免这种情况呢?
我不确定我是否见过这样的冲突。但我已经扩展了capistrano deploy:cleanup
任务,清理过时的捆绑器宝石:
after "deploy:cleanup", "bundle:clean"
namespace :bundle do
task :clean, :except => {:no_release => true} do
bundle_cmd = fetch(:bundle_cmd, "bundle")
run "cd #{latest_release} && #{bundle_cmd} clean"
end
end
如果引起冲突,可以在deploy
之后执行
khustochka的上述回答完美地解决了我的问题。但是,如果您的系统使用的是Capistrano v3,那么语法将发生重大变化。我使用了以下语句:
namespace :bundle do
task :clean do
on roles(:web) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :bundle, :clean
end
end
end
end
end
after "deploy:cleanup", "bundle:clean"
~