部署 记一次 capistrano 异常及其引发的思考

netqyq · 2017年04月05日 · 最后由 netqyq 回复于 2017年04月06日 · 2158 次阅读

缘起

记得上一次线上部署是 3 月 29 日,使用cap production deploy,没有什么问题,顺利部署。

今天跟新了几行代码,没动 capistrano 相关的部分,执行部署命令,居然直接 abort 异常退出了!百思不得其解。

报错如下:

(Backtrace restricted to imported tasks)
cap aborted!
Don't know how to build task 'start' (see --tasks)

Tasks: TOP => production
(See full trace by running task with --trace)

找原因

加上--trace看了一下,没找到明显的提示。

只好祭出 google 了。搜索一下关键字,看了几条结果,好像不搭边。再精确提炼一下关键字。

从报错中提取一行关键信息,Don't know how to build task 'start' (see --tasks),去掉后面的(see --tasks),因为原则上尽量不要给搜索引擎增加处理特殊符号的负担,再加上主题词capistrano, 因为主要是它的问题。

最终的搜索关键字如下:

capistrano Don't know how to build task 'start'

这样的话问题逻辑上就会被限定死。如果这样没有结果,搜索这条路子就至此了。

果然,看到第三条,还是stackoverflow,有人说了

Add install_plugin Capistrano::Puma into your Capfile after require 'capistrano/puma'.

capistrano3-puma moved to 3.0 a few days ago. This line is required for loading default puma tasks in this version.

See https://github.com/seuros/capistrano-puma#usage

解决方法

特别是再看到moved ... a few days ago时,心中一阵喜感,觉得有希望了。

试一下再 Capfile 中加入

install_plugin Capistrano::Puma

执行bundle后,再运行部署命令就正常了。

总结思考

  1. 搜索时关键字选取很重要。 尽量去除一些介词、连词、语气词,去除特殊符号。因为在后台处理时这些也是要先去掉的,加上以后反而会给搜索引擎增加负担,从而降低准确率,不如我们先人工过滤一遍。

  2. 如何避免类似事件? 考虑真正的原因,本地相关代码都没动,唯一动的就是执行了几遍bundle命令,这样应该会把相关库一些最新代码同步下来,而配置没有自动同步下来,引发错误。由于这里 gem 中没有指定版本,这样的话会是使用最新的吧。

没注意到 Capistrano::Puma 的更新,没有跟上社区脚步。

嗯嗯,最近也遇到这个。刚想总结,就看到也有进坑哈😀

capistrano3-puma 从 2 到 3 是个大版本升级,当然需要看一下Usage,如果看一下的话,其实这个问题根本就不应该说是诡异异常。

今天也入坑

添加
install_plugin Capistrano::Puma
需要 登录 后方可回复, 如果你还没有账号请 注册新账号