如何在Ruby应用程序中冻结gem?

时间:2010-08-03 05:02:00

标签: ruby rubygems freeze

我需要冻结两个宝石,让我的项目从项目文件夹中引用那些宝石。

我知道在Rails中有很多方法可以做到,但我如何在Ruby中手动完成呢?

我根据上一个问题“jeweler”中的建议使用Starting a Ruby project: github + build tool

3 个答案:

答案 0 :(得分:2)

您可以独立于rubygems基础架构使用它们,首先将每个gem解压缩到vendor / gems(或项目中的任何路径):

cd yourapp
mkdir -p vendor/gems
cd vendor/gems
gem unpack gem1
gem unpack gem2
[etc.]

...然后将所有冻结的宝石的lib目录添加到您的加载路径中:

$:.unshift(*Dir[File.dirname(__FILE__) + "/vendor/gems/**/lib"])

答案 1 :(得分:0)

使用Bundler怎么样?你可以简单地用它来锁定你的应用程序宝石。

答案 2 :(得分:0)

我的第一个建议也是使用Bundler并锁定你的包。如果你想用它来分发宝石,你甚至可以把它放在你的应用程序目录中,但如果gem包含一个带有本机代码的扩展并且你将它分发到另一个平台,这可能会导致问题。

顺便说一句,Rails 3专门使用Bundler进行gem管理。在Rails 3中将不再有rake rails:freeze:gems

作为另一种选择,如果您由于某种原因不想使用Bundler,您可以手动将gem的lib目录放到应用程序中lib目录的某个子目录中,将其添加到您的加载路径并要求它手动。如果gem包含没有任何扩展名的纯Ruby代码,这可能会很好,但由于您需要手动进行更新,因此很难维护。