ruby - Capistrano 配方自动运行部署 :cleanup only when needed

标签 ruby deployment capistrano webistrano

我们每天使用 capistrano(实际上是 webistrano)进行 20 多次部署,但我们遇到了一个问题,即我们服务器上的磁盘空间充满了旧的部署文件夹。

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

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

after "deploy", "deploy:cleanup"

但是,我不想在每次 部署后执行此操作,我想将其限制为仅当先前部署的数量达到阈值时,例如70. 有谁知道我该怎么做?


想法:

  • Capistrano 是否提供了一个变量来保存以前部署的数量?
    • 如果不是,有没有人知道计算它的方法。即 set :num_releases, <what-can-I-put-here-to-count-previous-deployments>
  • 有没有办法拉皮条deploy:cleanup所以它使用最小阈值,即如果 < :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?

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

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 上设置的 beforeafter 指令会正常执行。例如,我们需要以下内容:

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

关于ruby - Capistrano 配方自动运行部署 :cleanup only when needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008448/

相关文章:

deployment - 在哪里可以找到有关 VS 2010 部署的最新信息/演练?

deployment - 无论错误如何,都使用 capistrano 执行代码

mysql - 尝试连接到 MySQL 本地主机服务器,但浏览器无法加载并要求我下载文件

javascript - ruby rails : how to pass JSON to JavaScript

deployment - 为发布的版本保存哪些工件?

ruby - 使用 capistrano 部署时切换用户?

ruby-on-rails - 动态站点地图的 Capistrano 3 配方

ruby-on-rails - capistrano 错误 : . ..../current: 没有这样的文件或目录

ruby - 有没有办法用 aasm gem 保存状态历史?

ruby - GOD和环境变量: How to manage credentials?