2013-03-09 38 views
1

如何在使用capistrano命令进行部署时避免共享包文件夹下的多个宝石。大多数时候,当我将一个gem从一个版本迁移到另一个时,共享包文件夹仍然包含这两个版本,从而导致问题。我们应该如何避免这一点?如何避免共享包文件夹下的多个宝石

回答

4

我不知道我看到过这样的冲突。但我已经延长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后。

+0

这会不会破'部署:rollback'?如果旧版本的代码依赖于不同版本的gem,则回滚将失败,因为该gem已被清除。可能需要再次回滚到'bundle install'? – gmcnaughton 2017-06-29 21:13:59

1

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" 

相关问题