解决宝石版本不兼容问题

时间:2017-04-03 15:01:57

标签: ruby-on-rails rubygems bundler

我是Ruby,Rails和gem管理的新手。我注意到的一件事是,每当我运行bundle install(甚至在项目目录中)时,它似乎也会安装影响其他基于宝石的Rails项目的宝石。

例如,假设在一个基于gem的Rail项目(从gemfile中安装了一堆gem)中运行bundle install后,我遇到了gem不兼容问题。现在,这些问题也将在所有其他基于宝石的项目中体现出来,并且每当我尝试rackup

时都会出现这些问题。

我的问题是:
1)是否有办法将此损坏(宝石版本不兼容)本地化到当前项目而不影响其他项目?
2)有没有一种很好的方法来获得一组兼容的宝石,或者是在gem-by-gem基础上查看gem依赖项的唯一方法(查看树)并找出兼容的宝石?我似乎浪费了很多时间在这上面,如果我解决了其他一些东西似乎打破了。

请让我知道我在这里失踪的地方或指向我的资源。

由于

1 个答案:

答案 0 :(得分:0)

听起来你错过了使用bundle exec

  

描述   此命令执行命令,使得Gemfile(5)中指定的所有gem在Ruby程序中都可用。

     

基本上,如果您通常运行类似rspec spec/my_spec.rb的内容,并且想要使用Gemfile(5)中指定的gem并通过bundle install(1)安装,则应运行bundle exec rspec spec/my_spec.rb

bundle install会将宝石安装到$GEM_HOME,这是由任何使用相同ruby的应用程序共享的,并且可能会导致安装相同gem的多个版本(这是预期的和正常的)。如果您还没有使用bundle exec仅加载Gemfile中指定的gem版本,则可能会出现不兼容错误或意外行为,因为ruby不知道要求哪个版本的特定gem。

RVM,rbenv和其他ruby版本管理器是用于隔离每个项目的宝石的有用工具(在使用bundler时也不是必需的)以及允许在同一台机器上安装多个ruby版本(不是由bundler处理的,在开发具有不同ruby版本要求的多个应用程序时非常有用。)