2010-08-03 20 views
2

我需要冻结两个宝石,并使我的项目从其项目文件夹中引用这些宝石。如何冻结Ruby应用程序中的宝石?

我知道在Rails中使用它的方法很多,但是如何在Ruby中手动执行?

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

+0

我想,我的下一个问题应该是“Ruby == Ruby on Rails这些天?”。没有人单独使用Ruby,而是使用Ruby for Rails for Web应用程序。 – zengr 2010-08-03 08:22:41

回答

2

你可以先拆包每颗宝石为供应商/宝石(或您的项目中的任何路径)独立RubyGems的基础设施的使用:

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"]) 
0

如何使用Bundler?你可以简单地用你的应用程序来锁定它。

+0

是的,Bundler是一个选项,但这不会使桌面应用程序真正便携。在rails中,我们有一个rake freezen选项:宝石。我们可以复制类似的功能吗?怎么样? – zengr 2010-08-03 09:43:27

0

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

顺便说一句,Rails 3独家使用Bundler进行宝石管理。 Rails 3中不再有rake rails:freeze:gems了。

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