部署 记一次奇怪的部署问题

hiveer · 2018年03月15日 · 最后由 hiveer 回复于 2018年03月16日 · 3031 次阅读

这是一个个人练手的小项目,做了一个微信吃鸡群里的吃鸡排名,有兴趣的可以见 (https://github.com/IFS49F/knivesout_ranking)

项目基于 Rails + React,具体版本如下:
ruby 2.5.0
rails 5.1.4
react 16.2.0
capistrano 3.10.1
unicorn 5.4.0

在某个风和日丽的下午,我对项目的 style 做了一些更新,主要是给 table 中的每个 tr 行加上了 opacity 的 style,从上至下,渐渐透明。
完成编码,本地测试,都没有问题。接下来,git push origin, 再然后
cap production deploy
....
...log...
...
经历了较为漫长了等待,部署完成。然后日常的去刷新页面,然后,尼玛,什么鬼?页面样式居然没有更新。
接下来,我上了 github 以及服务器上 double confirm 了代码已经更新。所以,问题就在于页面拿到的是老的 stylesheet。

接着,来到了部署目录的 current,以及 shared 目录,查看所有 css assets 文件,然后和之前的 release 版本相比较,发现根本就没有新的 css assets 生成。

接着,在服务器上,手动执行 rake assets:precompile,然后 check current 下的 assets,发现了生成的新 css assets,然后刷新页面,依然没有动静

接着,cap production unicorn:restart,依然 fucking the same

接着,执行 cap production deploy:clobber_assets 清除了 current 下的所有 assets,但是无济于事,因为页面加载的是之前 release 对应的 css assets

接着,执行 cap production deploy:cleanup 结果是告诉我,没什么可以做的,因为我设置了保留 5 个 release,现在就是 5 个

接着,在 current 目录下执行 bundle exec rake tmp:clear 依然没有什么卵用

其实,看着我最后执行的两个命令,已经能看出我比较抓狂了……😫

最后不抱什么希望依次的执行了
rake assets:precompile
cap production unicorn:stop
cap production unicorn:start

WTF, 居然,成功了!看到了该看到的样式。

再之后,我两次更新了一些代码,样式之类的,然后通过 cap production deploy 发布,都能正常工作。

目前为止,我还没有搞清楚发生了什么,我还在继续探索。如果你遇到过类似情况,希望你能在评论区分享下。

我也遇到过类似的情况,似乎是在部署结束时重启 unicorn 的时候重启失败了。很多时候我都会手动 stop 再 start,我遇到的情况是 start 的时候经常会失败,然后查看 unicorn log 基本上能发现问题。

@liukun_lk 嗯,unicorn 没有真正重启,这个应该是比较确定的一个事儿了。

@liukun_lk 还有种可能性,就是 rake assets:precompile 没能成功,public 的 assets 未更新,同时并没有生成新的 md5hash 列表,这样的话,就算 unicorn 重启了,Rails helper 找到的还是老版本的文件。

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