我有几个gem文件,我通过gem install xx.gem
安装。我可以告诉Bundler使用它们吗?或者我是否必须指定源路径?
答案 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