【发布时间】:2011-08-03 18:51:37
【问题描述】:
我有几个通过gem install xx.gem 安装的gem 文件。我可以告诉 Bundler 使用它们吗?还是我必须指定源路径?
【问题讨论】:
我有几个通过gem install xx.gem 安装的gem 文件。我可以告诉 Bundler 使用它们吗?还是我必须指定源路径?
【问题讨论】:
这并不是对您关于安装 .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"
(正如his comment中提到的@JHurrah。)
【讨论】:
gem "foreman", :git => "https://github.com/pje/foreman.git"
似乎捆绑程序无法使用 .gem 文件开箱即用。将 :path 指向包含 .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,请确保重新生成索引。
【讨论】:
source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2" 来绕过绝对路径要求
repo 文件夹的 gems 文件夹中,而只是放入 repo 文件夹中。您是否创建了gems 文件夹?
我会在应用程序供应商文件夹中解压你的 gem
gem unpack your.gem --target /path_to_app/vendor/gems/
然后在 Gemfile 上添加路径以链接解压后的 gem。
gem 'your', '2.0.1', :path => 'vendor/gems/your'
【讨论】:
默认情况下,Bundler 将首先检查您的系统,如果找不到 gem,它将使用 Gemfile 中指定的源。
【讨论】:
您可以通过“bundle package”和“bundle install --local”强制捆绑器使用您部署的 gems
在您的开发机器上:
bundle install
(安装所需的 gem 并生成 Gemfile.lock)
bundle package
(缓存供应商/缓存中的宝石)
在服务器上:
bundle install --local
(--local 表示“使用来自供应商/缓存的 gem”)
【讨论】:
bundle install之前先把gem文件暂时从gem文件中删除,然后把gemfile复制到vendor/cache,再把gem添加回gemfile并执行bundle install --local
bundle package 是一个很好的建议,即使是现在,三年后。如果您的 Bundler 版本早于 2.0(在撰写本文时尚未发布),如果您想包含具有 path 或 git 依赖项的 gem,则需要使用 bundle package --all。不过,如果它检测到此类依赖项,它会给您一个有用的提醒。
--local 文档:“请注意,如果 rubygems.org 上存在适当的特定于平台的 gem,它将找不到。”
将.gem 添加到vendor/cache 似乎有效。 Gemfile 中不需要任何选项。
【讨论】:
我发现使用 geminabox 运行我自己的 gem 服务器最简单
【讨论】: