bundler和rvm正在使用不同的红宝石

时间:2015-06-18 03:29:10

标签: ruby-on-rails ruby rvm capistrano bundler

我有rvm和bundler之间区别的要点。在我的本地机器上,我使用rvm来管理不同的红宝石和不同的宝石。例如,我有一个带有名为core的gemset的ruby 2.1.2:

$ rvm-prompt
ruby-2.1.2@core
$ rvm gemdir
/Users/donato/.rvm/gems/ruby-2.1.2@core
$ cd /Users/donato/.rvm/gems/ruby-2.1.2@core/gems
$ ls
actionmailer-4.1.10
...

正如你所看到的,我有一个ruby 2.1.2和一个gemset核心用于那个ruby。当我运行我的项目时,rails会查找/Users/donato/.rvm/gems/ruby-2.1.2@core/gems中的宝石。它不会在shared/bundle寻找宝石。实际上,我的本地计算机上的Rails根目录中甚至没有共享目录。

所以在我的本地机器上,虽然bundler管理gem依赖项并添加gems如果在Gemfile中找到新的gems,它不会管理gems安装的LOCATION。它在rvm gemdir中安装宝石。实际上,当您运行bundle install并且Gemfile中存在新的gem时,Bundler实际上会在rvm的gem目录中安装gem。

令人困惑的是,这不是在暂存或生产部署中的工作方式。看来捆绑包在shared/bundle位置查找宝石。显然在生产中,捆绑商不仅想要安装宝石,而且还希望管理宝石的位置,让rvm只担心红宝石,而不是宝石位置。

这给我带来了一个问题。我正在使用capistrano进行部署。当我运行cap staging deploy时,它正在错误的红宝石中安装宝石。

capistrano脚本运行这一行:

  

运行/ usr / local / rvm / bin / rvm ruby​​-2.1.2@core进行捆绑安装   --path / var / www / mysite_staging / shared / bundle - without development test --deployment --quiet

你可以看到它在shared / bundle中安装了宝石。

成功部署后,当我转到shared/bundle/ruby时,会看到以下目录:

/shared/bundle/ruby/2.1.0

等一下!在我使用capistrano-rvm的capistrano 3脚本中,我指定了以下内容:

set :rvm_type, :system
set :rvm_ruby_version, 'ruby-2.1.2@core'

如果建议使用bundler来管理登台和生产中的gem位置,在shared / bundle目录下,那我该如何解决这个问题呢?为什么bundler会为这个项目安装错误的ruby版本的宝石?

1 个答案:

答案 0 :(得分:0)

那么,您所说的机器与您部署的服务器之间的主要区别是什么?

看看:http://bundler.io/v1.9/deploying.html 查看开发和部署之间的不同行为,并阅读有关capistrano的说明。

希望这会有所帮助