如何在bundler(非源代码)中包含.gem文件

时间:2011-02-01 20:12:41

标签: ruby-on-rails-3 rubygems bundler

我有一个rails应用程序依赖于我正在同时开发的库。

部署应用时,我无法使用:git => ''在bundler中选择加载gem的各种原因。理想情况下,我想要做的是以下

的Gemfile

gem 'system-api', :gem => 'vendor/system-api-1.0.0.gem'

我想预先构建gem并将其包含在项目中并将其检入git。

有没有办法用bundler或甚至不使用bundler来做到这一点?

[更新1]

我试过“gem'ystem-api','1.0.0',:path =>'vendor /'”并且捆绑包说它安装正确,但宝石没有显示在'宝石列表'中也没有rails项目是否有引用它。它以'bundle show'命令显示。

4 个答案:

答案 0 :(得分:0)

看起来Bundler有一个:path选项。它将相对于项目的Gemfile位置运行。路径仅指定文件夹,而不是实际的gem名称:

gem 'system-api', :path => "vendor"

有关详细信息,请参阅bundler's Gemfile docs

答案 1 :(得分:0)

如果将X.gem文件放入./vendor/cache

,它可能会起作用

如果您运行“bundle package”,那么bundler将放置内置的.gem文件。所以,如果你自己把它放在那里,捆绑商会在那里找到它吗?也许。但是我不确定在./vendor/cache中包含一些宝石的想法和其他没有,不完全确定Bundler是否支持,因为我认为“捆绑包”坚持将所有的em放在那里。

http://gembundler.com/bundle_package.html http://gembundler.com/man/bundle-package.1.html

如果不是将预先构建的X.gem检入您的仓库,您可以检查X gem的SOURCE到您的仓库中,并且源包含一个X.gemspec文件,然后您可以使用:path选项。但我想你已经发现:path选项希望指向源代码,而不是* .gem包。如果您只是解压缩* .gem,那么可能会生成一个目录,您可以使用bundler gem:path with。 (A * .gem产品只是一个zipfile ......我想。)

不是一个明确的答案,但可能会有一些想法。

答案 2 :(得分:0)

我会说这是正常的gem list不会显示你的宝石。您通过bundler安装它,并且在运行gem list时不调用bundler。相反,请查看bundler exec gem list

顺便说一句,在使用Bundler时,您应该始终在运行的任何命令行之前使用bundler execrails server除外,它有自己的方式启动并运行Bundler):{{ 3}}

答案 3 :(得分:0)

我做了以下工作:

gem 'libv8', '3.11.8.3mytest', :path => '../libv8/pkg'

../libv8/pkg文件夹仅包含二进制打包的gem libv8-3.11.8.3mytest-x86_64-linux.gem

希望这有帮助。