用rvm捆绑包

时间:2016-05-28 05:28:07

标签: ruby-on-rails ruby bundle

我正在阅读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时,“捆绑包”的目的是什么?

1 个答案:

答案 0 :(得分:0)

根据我的评论。在为gem文件添加设计之后,你没有运行包,这就是为什么它不在vendor / cache中。捆绑安装仍然需要在您的系统上安装宝石。

来自bundler website

  

package命令会将包中gems的.gem文件复制到./vendor/cache中。之后,当您运行bundle install时,   Bundler将使用缓存中的gem,而不是rubygems.org上的gems。

     

此外,如果您在源中检查该目录   控制库,其他检查你的源的人将能够   安装捆绑包而无需下载任何其他宝石。

rvm gemset和bundler解决了使用/激活哪组gem /版本的一些相同问题。现在使用bundler,你不需要使用rvm gemsets,gemfile会处理它。但事实并非如此。