Capistrano - 清理旧版本
Posted
技术标签:
【中文标题】Capistrano - 清理旧版本【英文标题】:Capistrano - clean up old releases 【发布时间】:2011-01-08 11:33:09 【问题描述】:通常在使用 capistrano 时,我会从已部署的应用程序中手动删除旧版本。我知道您可以运行cap deploy:cleanup
,但仍然有 5 个版本。这是它的预期目的吗?是否有另一种方法可以将旧版本清理为仅 1 个以前的部署?
【问题讨论】:
保留一些以前的版本是个好主意,那么如果您上次部署包含一个大错误,您可以使用 capistrano (cap deploy:rollback) 快速回滚到以前的版本,直到您修复它。 【参考方案1】:您可以使用:keep_releases
变量来覆盖默认值5。检查this。
【讨论】:
可能值得注意的是,即使 find+rm 命令无法删除某些文件,当通过after
挂钩调用时,该任务似乎也会默默地“成功”。直接调用它会显示错误......当我开始用完磁盘空间时我意识到了这一点。
@Josh 你接受了这个答案,但你应该检查你是否已经为“deploy:cleanup”设置了回调,如下所述,因为默认情况下它不会运行。【参考方案2】:
您可以通过在 deploy.rb 中设置来自动执行此操作
set :keep_releases, 1
after "deploy:update", "deploy:cleanup"
过去(我不知道具体是哪个版本)这个回调是默认的,但后来开发者决定让用户来决定。在 capistrano 3 中,它被添加回默认部署流程。
【讨论】:
谢谢你,迭戈。您的答案在 Capistrano v2.14.1 中正确运行。 看起来像Capistrano 3 callsdeploy:cleanup
as part of the deploy flow。【参考方案3】:
如果您想删除除最后 3 个以外的所有版本,例如,您可以运行:
cap deploy:cleanup -s keep_releases=3
【讨论】:
不起作用。optionParser::InvalidOption: invalid option: s
【参考方案4】:
我遇到了类似的问题。我想保留 5 个版本以用于正常部署,但在某些情况下需要能够删除所有以前的版本。
我可以通过自定义任务做到这一点。创建文件lib/capistrano/tasks/cleanup.rake
并添加以下代码。
desc "Remove all but the last release"
task :cleanup_all do
set :keep_releases, 1
invoke "deploy:cleanup"
end
要运行使用bundle exec cap staging cleanup_all
或cap staging cleanup_all
【讨论】:
以上是关于Capistrano - 清理旧版本的主要内容,如果未能解决你的问题,请参考以下文章