如何在我的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服务器是最容易的

看到这些简单的说明 。