我正在运行Rails 3.2.1& RVM环境中的Ruby 1.9.2-p290
在我的dev文件夹中,我有许多不同的Rails应用程序,都运行上面的内容,但我没有创建单独的gemsets
我用自己的gemfile创建了一个新的应用程序,运行了bundle install等等,所有这些都没问题,直到我回到原来正在处理的主应用程序
当我现在做rake路线时,我收到了错误
rake aborted!
You have already activated rake 10.0.3, but your Gemfile requires rake 10.0.2. Using bundle exec may solve this.
我想我知道如何回到正轨,但这是我不明白的地方:
当我查看.rvm / gems / ruby-1.9.2-p290 / gems文件夹时,我可以看到rake-0.8.7,rake-0.9.2.2,rake-10.0的每个宝石的文件夹.2,rake-10.0.3
所以我安装了一个版本的rake 10.0.2,我的主应用程序gemfile.lock调用rake(10.0.2),当我运行bundle exec rake路由时它实际上工作(假设运行10.0.2?),但是当我运行直接的rake路线时,Rails似乎想要运行不同版本的Rake而不被要求。
所以我的问题是如何知道安装Gem的哪个版本实际上正在运行,因为调用已安装的Gem的特定版本似乎没有按照您的预期执行?
(另外,我想如果我在相同的RVM空间内开发不同的应用程序,我应该为每个应用程序创建单独的gemsets?)
答案 0 :(得分:6)
在rubygems 2.0中修复了这个问题 - 可以尊重Gemfile加载任何可执行的gem。
至于你的问题RVM附带我的gem安装rubygems-bundler
并且如果可能的话它应该会自动解决依赖关系 - 如果没有安装正确的版本,它会回退你的问题,有一张票可以改变这种情况来提高在这种情况下的例外 - https://github.com/mpapis/rubygems-bundler/issues/37
基本上 - 确保在项目中执行任何操作之前运行bundle install
,rubygems-bundler
将确保运行正确版本的gem。
答案 1 :(得分:3)
问题是,当您安装了同一个gem的多个版本时,您将执行的二进制文件rake
始终是最新版本。如果您的应用程序依赖于该gem的旧版本,则无法激活它,因为已经加载了较新版本。
有三种解决方案:
bundle exec rake
这将始终使用Gemfile中的版本bundle --binstubs
。这会在项目中创建一个./bin
文件夹。您现在可以从Gemfile访问指定gem版本的二进制文件。您可以使用./bin/rake
编辑:正如您所提到的,您还可以创建单独的gemsets来推迟问题。有时候,当您更新分支上的gem然后切换时,您仍然会收到错误。