Answers:
严格来说,这并不是您安装.gem
软件包的问题的答案,但是您可以通过编辑Gemfile逐个 gem地指定各种位置。
: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"
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中,将捆绑程序指向该位置
source "file://path/to/repo"
如果更新存储库中的gem,请确保重新生成索引。
gem server
也不想托管整个项目,而只是.gem文件。
source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
默认情况下,Bundler将首先检查系统,如果找不到宝石,它将使用Gemfile中指定的源。
您可以强制捆绑器使用通过“捆绑包”和“捆绑安装--local”部署的gem
在您的开发机器上:
bundle install
(安装必需的gem并制作Gemfile.lock)
bundle package
(在供应商/缓存中缓存宝石)
在服务器上:
bundle install --local
(--local表示“使用供应商/缓存中的宝石”)
bundle install
复制到供应商/缓存中,然后将宝石重新添加到宝石文件中并执行 bundle install --local
bundle package
即使在三年后的今天,也是一个很好的建议。如果您的Bundler版本早于2.0(在撰写本文时尚未发布),bundle package --all
则如果要包含带有path
或git
依赖的gem,则需要使用。但是,如果它检测到这种依赖性,它将给您一个有用的提醒。
--local
文档:“请注意,如果在rubygems.org上存在适当的平台特定的gem,则将找不到它。”