我是Ruby,Rails和gem管理的新手。我注意到的一件事是,每当我运行bundle install
(甚至在项目目录中)时,它似乎也会安装影响其他基于宝石的Rails项目的宝石。
例如,假设在一个基于gem的Rail项目(从gemfile中安装了一堆gem)中运行bundle install
后,我遇到了gem不兼容问题。现在,这些问题也将在所有其他基于宝石的项目中体现出来,并且每当我尝试rackup
我的问题是:
1)是否有办法将此损坏(宝石版本不兼容)本地化到当前项目而不影响其他项目?
2)有没有一种很好的方法来获得一组兼容的宝石,或者是在gem-by-gem基础上查看gem依赖项的唯一方法(查看树)并找出兼容的宝石?我似乎浪费了很多时间在这上面,如果我解决了其他一些东西似乎打破了。
请让我知道我在这里失踪的地方或指向我的资源。
由于
答案 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版本要求的多个应用程序时非常有用。)