如何在我的Gemfile中指定本地.gem文件?
我有几个gem文件,我通过gem install xx.gem
。 我可以告诉Bundler使用它们吗? 或者我必须指定源path?
默认情况下,Bundler会首先检查你的系统,如果它找不到gem,它将使用你的Gemfile中指定的源。
这不是严格的关于安装.gem
包的问题的答案,但是您可以通过编辑您的Gemfile来指定所有types的位置,并以gem-by-gem为基础。
指定:path
属性将在本地机器上从该path安装gem。
gem "foreman", :path => "/Users/pje/my_foreman_fork"
或者,指定:git
属性将从远程git存储库安装gem。
gem "foreman", :git => "git://github.com/pje/foreman.git" # ...or at a specific SHA-1 ref gem "foreman", :git => "git://github.com/pje/foreman.git", :ref => "bf648a070c" # ...or branch gem "foreman", :git => "git://github.com/pje/foreman.git", :branch => "jruby" # ...or tag gem "foreman", :git => "git://github.com/pje/foreman.git", :tag => "v0.45.0"
(正如@JHurrah在他的评论中提到的那样)
似乎bundler不能使用.gem文件。 指向包含.gem文件的目录的path不起作用。 有人build议为此设置一个本地gem服务器(geminabox,stickler)。
然而,我发现更简单的是从文件系统中使用本地gem“server”:只要把你的.gem文件放在本地目录下,然后使用“gem generate_index”来使它成为一个Gem仓库
mkdir repo mkdir repo/gems cp *.gem repo/gems cd repo gem generate_index
最后,通过将下列行添加到您的Gemfile中,将bundler指向此位置
source "file://path/to/repo"
如果您更新存储库中的gem,请确保重新生成索引。
我将解压你的gem在应用程序供应商文件夹
gem unpack your.gem --target /path_to_app/vendor/gems/
然后在Gemfile中添加path来链接解压后的gem。
gem 'your', '2.0.1', :path => 'vendor/gems/your'
您可以强制捆绑器使用您使用“捆绑包”和“捆绑安装 – 本地”部署的gem,
在你的开发机器上:
bundle install
(安装所需的gem,并使Gemfile.lock)
bundle package
(caching供应商/caching中的gem)
在服务器上:
bundle install --local
( – 本地意味着“使用来自供应商/caching的gem”)
我发现使用geminabox
运行我自己的gem服务器是最容易的
看到这些简单的说明 。