【问题标题】:What's the point of freezing your Rails version/gems?冻结 Rails 版本/宝石有什么意义?
【发布时间】:2009-04-28 19:07:42
【问题描述】:

这是什么意思?

在一个项目的说明中,它说“冻结 Rails gems”。这与冻结 Rails 版本有什么不同?

冻死是怎么回事?

【问题讨论】:

    标签: ruby-on-rails ruby rubygems freeze


    【解决方案1】:

    如果您使用的 gem 的作者之一介绍了新版本的 gem,则新版本可能会引入向后不兼容的更改,这会破坏您的代码。

    冻结 gem 会将其放入应用程序的 vendor 文件夹中,它不会自行自动更新。 Rails 将使用此版本的 gem。

    这允许您为其他应用程序更新系统上的 gem,同时让您的唯一应用程序使用您一直使用的 gem 版本,因此是稳定的。

    这也适用于 rails gem 本身,因为新版本的 rails 最终可能会导致您的应用程序中的某些内容发生故障,冻结它会阻止系统范围的更新(并且再次允许您更新您的其他应用程序)机器,而离开应用程序时,您将轨道冻结在该版本号。

    【讨论】:

      【解决方案2】:

      我认为 Phillc 用他的 cmets 击中了头。

      每当您有一个应用程序在人们依赖的生产环境中运行时,您就必须有一种“冻结”环境的机制。更新 rails 可能会导致您的应用程序停止正常工作。

      这可能是一些小问题,也可能是阻止您的用户完成工作的事情。

      只需谷歌“rails gem 更新破坏我的应用程序”即可看到一些问题。

      Igor Minar 有一篇很好的博客文章,介绍了为什么应该冻结 gem 和 Rails,并讨论了现在如何在 Rails 中设置特定的 gem 版本依赖项。

      你可以冻结 Rails,你可以冻结 gem,你可以在你的 environment.rb 文件中设置对特定 gem 版本的依赖。

      您这样做的原因是为了确保您的应用在发布更新版本的 gem 或 Rails 时不会中断。冻结让您可以在单独的机器上测试更新,确保它通过了所有的自动化测试套件,让您的用户通过它的步伐来放置更新的应用程序,然后(在良好的备份之后)您将更新应用到 gem 或导轨。

      【讨论】:

        【解决方案3】:

        冻结很棒 - 正如其他人所说,它可以减少您对外部环境的依赖。如果您使用的是共享主机,或者无法完全控制您的部署位置,这一点尤其重要。

        但是,对于 rake 和 capistrano 等不在 Rails 环境中运行的程序来说,这可能会出现问题。他们有自己的 gem 加载路径,你可以影响它,但你需要注意它。此外,不能冻结具有本机扩展(libxml、hpricot...)的 gem,因为特定于操作系统的位仍然需要存在于外部操作系统中。

        另外,现在可能不是问题,但需要注意的一点是——Rails 3 将转向管理插件、gem 和供应商目录的新方法。现在有点乱。

        【讨论】:

          【解决方案4】:

          Here's a tutorial 冻结 Rails 应用程序。

          【讨论】:

          • 死链接。 Stackoverflow 要求我添加更多字符。
          猜你喜欢
          • 1970-01-01
          • 2015-02-24
          • 2012-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多