许多共享主机在 Rails 1.1 发布时经历了一段快速的起伏,因为他们的大量客户的 gem 出现了问题,这意味着 gem 的升级会自动更新所有应用程序。有些应用程序无法处理升级(最典型的是 Typo),因此它们崩溃了。客户非常不满意,纷纷向主机商抱怨:“亲爱的主机商,你为什么要把我的应用程序升级坏掉?”
这显然不好。但没有什么是坏到你无法从中学习的。这是一个绝佳的学习机会,让你知道 **你绝对应该为你生产环境中的任何应用程序冻结 Rails**。当然,我们在去年12月就谈论过这个问题,但空谈是廉价的(而且经常被忽略)。
所以,下面是一个竖起的手指和一个承诺。先来竖起的手指
如果你将一个开源应用程序贡献给世界,你 **必须** 将它与你知道能够正常工作的 Rails 版本一起打包,存放在 vendor/rails 目录中。
有一个反驳的观点无法让你逃脱这个手指的警告:“但这样做会使我的应用程序下载体积增加 X%。”在这个时代,没人会在乎。时间比磁盘空间更有价值,而避免因依赖关系出错而造成的抓狂和痛苦,其价值远远超过磁盘空间。
然后是承诺:下一版本的 Rails 将默认将创建它的 Rails 版本提取到 vendor/rails 目录中。这将让每个人都能在第一天就进入圣诞节的良好氛围。你会自然而然地想要更少的依赖,并且你很快就会对共享主机通过选择更新某些 gem 来控制你的应用程序命运的想法感到愤怒。然后你就会幸福快乐。