2013-03-09 60 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"