我需要冻结两个宝石,并使我的项目从其项目文件夹中引用这些宝石。如何冻结Ruby应用程序中的宝石?
我知道在Rails中使用它的方法很多,但是如何在Ruby中手动执行?
我使用jeweler根据我上一个问题“Starting a Ruby project: github + build tool”的建议。
我需要冻结两个宝石,并使我的项目从其项目文件夹中引用这些宝石。如何冻结Ruby应用程序中的宝石?
我知道在Rails中使用它的方法很多,但是如何在Ruby中手动执行?
我使用jeweler根据我上一个问题“Starting a Ruby project: github + build tool”的建议。
你可以先拆包每颗宝石为供应商/宝石(或您的项目中的任何路径)独立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"])
我的第一个建议也是使用Bundler并锁定你的包。如果你想分发它的宝石,你甚至可以把它放在你的应用程序目录中,尽管这可能会导致问题,如果一个gem包含一个带有本机代码的扩展,并且你将它分发到不同的平台上。
顺便说一句,Rails 3独家使用Bundler进行宝石管理。 Rails 3中不再有rake rails:freeze:gems
了。
作为另一种选择,如果您不想使用Bundler出于某种原因,可以手动将lib目录放在应用程序的lib目录的某个子目录中,将其添加到您的加载路径并需要它手动。如果一个gem包含没有任何扩展名的纯Ruby代码,这可能会做得很好,但由于您需要手动更新,因此很难维护。
我想,我的下一个问题应该是“Ruby == Ruby on Rails这些天?”。没有人单独使用Ruby,而是使用Ruby for Rails for Web应用程序。 – zengr 2010-08-03 08:22:41