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

我有一对夫妇的 gem 文件,我通过 gem install xx.gem安装。我能让 Bundler 用吗?还是必须指定源路径?

119206 次浏览

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

您可以使用“ bundle package”和“ bundle install —— local”强制 bundler 使用您部署的 gems

在您的开发机器上:

bundle install

(安装所需的 gem 并使 Gemfile.lock)

bundle package

(将 gem 缓存在供应商/缓存中)

在服务器上:

bundle install --local

(—— local 的意思是“使用来自供应商/缓存的 gems”)

看来 Bundler 用不了。Gem 文件开箱即用。将: 路径指向包含。Gem 文件不管用。有些人建议为此设置一个本地 gem 服务器(geminabox,stikler)。

然而,我发现使用文件系统中的本地 gem“服务器”要简单得多: 只需将您的. Gem 文件放在一个本地目录中,然后使用“ Gem gener_ 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包的问题,但是您可以通过编辑 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)

我会将您的 gem 解压缩到应用程序供应商文件夹中

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

然后添加 Gemfile 上的路径来链接未包装的宝石。

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

我发现使用 geminabox运行我自己的 gem 服务器是最容易的

参见 这些简单的指示

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