rails console 可以用reload!
来重新加载所有的源文件,方便一边开发一边调试。原理是清除掉所有的常量,下次使用的时候会再自动加载。
我在想,是否可以在生产环境下面这样做(config.cache_classes=true
),平时不开启这样的功能,更新了代码之后,手动触发一个force_reload!
,之后代码就更新了?
#2 楼 @linjunhalida 应该没有 downtime 啊,除非你的应用压力太大,一段时间的不响应会导致 OS 的 socket 队列过长而开始丢包。如果已经是这个情况了,那你应该前面有一个 LB 顶着,然后后端轮流升级才对。
config.cache_classes 关掉会有性能问题,另外生产环境这样 reload 会产生不可预知的结果。
好的办法是使用集群分批重启(分批下线,重启,上线)
感觉又回到了我的某个论调..."运维是成本和技术上的平衡".......套过来说的就是与其花时间研究如何在 ruby 里面 reload(全部 reload 相当于重启,部分 reload 则不知道哪些需要 reload, 以及 reload 的顺序), 不如在更通用的层面上统一解决这个问题 (比如大集群分批重启,或者小集群使用提供的无缝重启功能)