如何在Gemfile中指定本地.gem文件?

时间:2011-04-12 10:41:30

标签: ruby rubygems bundler

我有几个gem文件,我通过gem install xx.gem安装。我可以告诉Bundler使用它们吗?或者我是否必须指定源路径?

7 个答案:

答案 0 :(得分:261)

这不是严格解决有关安装.gem软件包的问题的答案,但您可以通过编辑Gemfile来逐个宝石指定所有类型的位置。

指定: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中提及his comment。)

答案 1 :(得分:55)

似乎捆绑包不能使用开箱即用的.gem文件。指向:包含.gem文件的目录的路径不起作用。有人建议为此目的设置本地gem服务器(geminabox,stickler)。

然而,我发现更简单的是从文件系统使用本地gem“服务器”: 只需将.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,请确保重新生成索引。

答案 2 :(得分:39)

我会在应用程序供应商文件夹中解压缩你的gem

gem unpack your.gem --target /path_to_app/vendor/gems/

然后在Gemfile上添加路径以链接解压缩的gem。

gem 'your', '2.0.1', :path => 'vendor/gems/your'

答案 3 :(得分:28)

默认情况下,Bundler会首先检查你的系统,如果它找不到gem,它将使用你的Gemfile中指定的源。

答案 4 :(得分:5)

您可以强制捆绑包使用“捆绑包”和“捆绑安装 - 本地”

来部署您使用的宝石

在您的开发机器上:

bundle install

(安装所需的gems并生成Gemfile.lock)

bundle package

(在供应商/缓存中缓存宝石)

在服务器上:

bundle install --local

( - 本地意味着“使用来自供应商/缓存的宝石”)

答案 5 :(得分:1)

.gem添加到vendor/cache似乎可行。 Gemfile中不需要任何选项。

答案 6 :(得分:0)

我发现使用geminabox

运行我自己的gem服务器最简单

请参阅these simple instructions