加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 自动运行部署的Capistrano配方:仅在需要时清理

发布时间:2020-12-17 02:29:55 所属栏目:百科 来源:网络整理
导读:我们每天使用capistrano(实际上是 webistrano)进行20多次部署,我们遇到的问题是服务器上的磁盘空间充满了旧的部署文件夹. 我不时地运行deploy:cleanup任务来清除所有部署(它保留最后一个:keep_releases,当前设置为30).我想自动清理. 一种解决方案是将以下
我们每天使用capistrano(实际上是 webistrano)进行20多次部署,我们遇到的问题是服务器上的磁盘空间充满了旧的部署文件夹.

我不时地运行deploy:cleanup任务来清除所有部署(它保留最后一个:keep_releases,当前设置为30).我想自动清理.

一种解决方案是将以下内容添加到配方中,以便在每次部署后自动运行清理:

after "deploy","deploy:cleanup"

但是,我不希望在每次部署之后执行此操作,我只想将其限制为仅在先前部署的数量达到threashold时,例如70.有谁知道我怎么做到这一点?

思考:

> Capistrano是否提供了一个包含先前部署数量的变量?

>如果没有,有没有人知道计算它的方法. ie set:num_releases,< what-c??an-I-put-here-to-count-previous-deployments>

>有没有办法进行pimp部署:清理所以它使用最小阈值,即退出如果< :max_releases以前的部署(其中:max_releases不同于:keep_releases).
>可以使用except关键字吗?即:例如:except => {:num_releases< 70}.

解决方法

Does Capistrano provide a variable that holds the number of previous deployments?

是的,releases.length

Is there a way to pimp deploy:cleanup so it uses a minimum threshold?

是的,这是一个私有命名空间的任务,只有在建立了一定数量的版本文件夹时才会触发正常的清理任务:

namespace :mystuff do
  task :mycleanup,:except => { :no_release => true } do
    thresh = fetch(:cleanup_threshold,70).to_i
    if releases.length > thresh
      logger.info "Threshold of #{thresh} releases reached,runing deploy:cleanup."
      deploy.cleanup
    end
  end
end

要在部署后自动运行,请将其放在配方的顶部:

after "deploy","mystuff:mycleanup"

关于这一点的好处是,在deploy上设置的指令之前和之后:cleanup正常执行.例如,我们需要以下内容:

before 'deploy:cleanup','mystuff:prepare_cleanup_permissions'
after 'deploy:cleanup','mystuff:restore_cleanup_permissions'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读