我正在阅读Rails Way这本书。它讨论了运行“捆绑包”。这将存储您的应用在供应商/缓存中使用的所有.gem文件。运行捆绑安装将更喜欢供应商/缓存中的宝石到其他位置的宝石。我正在使用rvm,所以我用rvm测试了这个:
rvm gemset create rent_prototype
rvm use 2.2.1@rent_prototype
gem install rails
rvm gemdir
/home/viggy/.rvm/gems/ruby-2.2.1@rentme_prototype
$ cd /home/viggy/.rvm/gems/ruby-2.2.1@rentme_prototype
$ ls -l devise-4.1.1
ls: cannot access devise-4.1.1: No such file or directory
上面我用rvm创建了一个gemset,并检查了是否安装了devise gem,并且它不是因为它不在Gemfile中。现在我使用bundle package:
$ cd -
$ bundle package
Updating files in vendor/cache
* rake-11.1.2.gem
* i18n-0.7.0.gem
* json-1.8.3.gem
...
$ cd vendor/cache
$ ls -l devise-4.1.1
ls: cannot access devise-4.1.1: No such file or directory
当然,在供应商/缓存中也没有设计宝石。
然后我修改Gemfile并添加:
gem 'devise'
然后我运行bundle install
。
现在我查看安装设备的位置:
$ bundle show devise
/home/viggy/.rvm/gems/ruby-2.2.1@rentme_prototype/gems/devise-4.1.1
$ cd vendor/cache
$ ls -l devise-4.1.1
ls: cannot access devise-4.1.1: No such file or directory
因此,当我安装gem时,它会安装在rvm文件夹中。它不喜欢供应商/缓存到其他位置。如果是这种情况,当您使用rvm时,“捆绑包”的目的是什么?
答案 0 :(得分:0)
根据我的评论。在为gem文件添加设计之后,你没有运行包,这就是为什么它不在vendor / cache中。捆绑安装仍然需要在您的系统上安装宝石。
package命令会将包中gems的.gem文件复制到./vendor/cache中。之后,当您运行bundle install时, Bundler将使用缓存中的gem,而不是rubygems.org上的gems。
此外,如果您在源中检查该目录 控制库,其他检查你的源的人将能够 安装捆绑包而无需下载任何其他宝石。
rvm gemset和bundler解决了使用/激活哪组gem /版本的一些相同问题。现在使用bundler,你不需要使用rvm gemsets,gemfile会处理它。但事实并非如此。