我有一个rails应用程序依赖于我正在同时开发的库 .
当我部署应用程序时,由于各种原因,我无法在bundler中使用:git =>''选项加载gem . 理想情况下,我想要做的是以下内容
Gemfile
gem 'system-api', :gem => 'vendor/system-api-1.0.0.gem'
我想预先构建gem并将其包含在项目中并将其检入git .
有没有办法用bundler甚至不使用bundler来做到这一点?
[UPDATE 1]
我试过“gem'ystem-api','1.0.0',:path =>'vendor /'”并且捆绑包说它安装正确,但是gem没有显示在'gem list'中,也没有rails项目有参考 . 它显示为'bundle show'命令 .
4 回答
看起来Bundler有一个
:path
选项 . 它'll run relative to the project'的Gemfile位置 . 路径仅指定文件夹,而不是实际的gem名称:有关详细信息,请参阅bundler's Gemfile docs .
如果你将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 ......我想 . )
这不是一个明确的答案,但可能会有一些想法 .
我会说这是正常的
gem list
不显示你的宝石 . 您通过bundler安装它,并且在运行gem list
时不调用bundler . 相反,请查看bundler exec gem list
.顺便说一句,在使用Bundler时,你应该在运行的任何命令行之前使用
bundler exec
(除了rails server
,它有自己的方式启动和运行Bundler):bundle-exec man page我做了以下工作:
并且
../libv8/pkg
文件夹仅包含二进制打包的gemlibv8-3.11.8.3mytest-x86_64-linux.gem
.希望这可以帮助 .