【问题标题】:How to avoid multiple gems under shared bundle folder如何避免共享捆绑文件夹下的多个宝石
【发布时间】:2013-03-09 18:24:00
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails capistrano


    【解决方案1】:

    我不确定我是否见过这样的冲突。但我扩展了 capistrano deploy:cleanup 任务,清理过时的捆绑器 gem:

    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之后做。

    【讨论】:

    • 这会破坏deploy:rollback吗?如果旧版本的代码依赖于不同版本的 gem,回滚将失败,因为 gem 已被清理。可能需要再次挂钩回滚到bundle install
    【解决方案2】:

    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"
    

    ~

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多