这意味着什么?
在一个项目的说明中,它说“冻结 Rails gems”。这与冻结 Rails 版本有什么不同?
结冰是怎么回事?
这意味着什么?
在一个项目的说明中,它说“冻结 Rails gems”。这与冻结 Rails 版本有什么不同?
结冰是怎么回事?
如果您使用的 gem 的作者之一介绍了 gem 的新版本,则新版本可能会引入向后不兼容的更改,这会破坏您的代码。
冻结 gem 会将其放入应用程序的 vendor 文件夹中,并且它不会自行自动更新。Rails 将改用这个版本的 gem。
这允许您为其他应用程序更新系统上的 gem,同时让您的唯一应用程序使用您一直使用的 gem 版本,因此是稳定的。
这也适用于 rails gem 本身,因为新版本的 rails 最终可能会导致您的应用程序中的某些内容中断,冻结它会阻止系统范围的更新(并且再次允许您更新机器上的其他应用程序,同时将您冻结的应用程序留在该版本号。
我认为菲尔克的评论一针见血。
每当您有一个应用程序在人们依赖的生产环境中运行时,您就必须有一种“冻结”环境的机制。更新 rails 可能会导致您的应用程序停止正常工作。
这可能是一些次要的事情,也可能是阻止您的用户完成工作的事情。
只需 google 'rails gem update 会破坏我的应用程序',就可以看到一些麻烦。
Igor Minar有一篇很好的博客文章,介绍了为什么应该冻结 gem 和 Rails,并讨论了现在如何在 Rails 中设置特定的 gem 版本依赖项。
您可以冻结 Rails,您可以冻结 gem,您可以在 environment.rb 文件中设置对特定 gem 版本的依赖。
这样做的原因是为了确保您的应用程序在 gem 或 Rails 的更新版本发布时不会中断。冻结让您可以在单独的机器上测试更新,确保它通过了您所有的自动化测试套件,让您的用户通过它的步伐来放置更新的应用程序,然后(在良好的备份之后)您将更新应用到 gem 或导轨。
冻结很棒——正如其他人所说,它减少了你对外部环境的依赖。如果您使用的是共享主机,或者无法完全控制您的部署位置,这一点尤其重要。
然而,对于像 rake 和 capistrano 这样不在 Rails 环境中运行的程序来说,它可能会出现问题。他们有自己的 gem 加载路径,你可以影响它,但你需要注意它。此外,不能冻结具有本机扩展(libxml、hpricot...)的 gem,因为特定于操作系统的位仍然需要存在于外部操作系统中。
此外,现在可能不是问题,但需要注意的是——Rails 3 将转向管理插件、gem 和供应商目录的新方法。此刻一切都是一团糟。
这是一个冻结 Rails 应用程序的教程。