新手问题 部署的时候 bundle install 能否只有添加新的 gem 才执行

autumnwolf · 2016年08月10日 · 最后由 Zoker 回复于 2016年08月12日 · 2112 次阅读

每次部署的时候都执行 bundle install 的话感觉很慢也好像没那么必要,所以能不能判断如果添加了新的 gem 才执行 bundle install?

如果可以怎么写这个 task?

deploy.rb

after :finishing, :bundle do
    on roles :all do
      within current_path do
        info "Current is: #{current_path}"
        execute "cd #{current_path}; bundle install --deployment --without development test"
        execute "cd #{current_path}; bundle exec rake assets:precompile RAILS_ENV=#{fetch(:stage)}"
        execute "cd #{current_path}; bundle exec rake db:migrate RAILS_ENV=#{fetch(:stage)}"
        execute "cd #{current_path}; passenger-config restart-app $(pwd)"
      end 
    end
  end

bundle 应该默认有 cache 的,所以如果没有改动的话,不应该耗费大量时间在这上面

#1 楼 @jasl 我的意思是每次‘bundle install’至少要花些时间的,可否不没次都这样。或者说我这个 bundle install 应不应该加到自定义的任务里面?

#2 楼 @autumnwolf 这样的效果,那些没绑定版本的包怎么确保他们升级?

4 楼 已删除

那么问题来了,怎么样程序才知道你添加了新的 gem 还是修改了 gem 的版本还是删除了 gem 呢?

第一次 bundle install 以后,gem 没有变动的话。 bundle install --local 如果 gem 已经下载到本机内,只是 using 一下速度很快的。

#5 楼 @yakjuly 直接拿git reflog第一行对比拉取前后的差异文件是否有 Gemfile 就行了,很容易做到。

@Zoker, 那 Capistrano 里怎么取得更新前的 Gemfile 和更新后的 Gemfile 呢?

#8 楼 @yakjuly 拿到了更新前后的 commit id 就可以拿到对应版本的文件

需要 登录 后方可回复, 如果你还没有账号请 注册新账号