Ruby on rails 3 Rails未在gem文件中运行gem
我在RVM环境中运行Rails 3.2.1和Ruby 1.9.2-p290 在我的dev文件夹中,我有许多不同的Rails应用程序,它们都运行上述程序,但我没有创建单独的gemset 我用自己的gemfile创建了一个新的应用程序,运行了bundle安装等,在我回到我最初开发的主应用程序之前一切都正常 当我现在做一个rake路由时,我得到了错误Ruby on rails 3 Rails未在gem文件中运行gem,ruby-on-rails-3,gem,rvm,Ruby On Rails 3,Gem,Rvm,我在RVM环境中运行Rails 3.2.1和Ruby 1.9.2-p290 在我的dev文件夹中,我有许多不同的Rails应用程序,它们都运行上述程序,但我没有创建单独的gemset 我用自己的gemfile创建了一个新的应用程序,运行了bundle安装等,在我回到我最初开发的主应用程序之前一切都正常 当我现在做一个rake路由时,我得到了错误 rake aborted! You have already activated rake 10.0.3, but your Gemfile requi
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的每个gems的文件夹
所以我安装了一个版本的rake 10.0.2,我的主应用程序gemfile.lock调用rake(10.0.2),当我运行bundle exec rake routes时,它确实可以工作(假定运行10.0.2?),但当我运行一个直rake routes时,Rails似乎想要运行一个不同版本的rake,而不是被要求运行
因此,我的问题是,鉴于调用特定版本的已安装Gem似乎没有达到预期效果,我如何知道实际运行的是哪个版本的已安装Gem
(另外,我想如果我在同一个RVM空间中开发不同的应用程序,我可能应该为每个应用程序创建单独的gemset?问题是,当安装了同一gem的多个版本时,您将执行的二进制文件
rake
始终是最新版本。如果您的应用程序依赖于该gem的旧版本,则无法激活它,因为新版本已经加载
有三种解决方案:
bundle exec rake
这将始终使用您的GEM文件中的版本bundle--binstubs
。这将在项目中创建一个/bin
文件夹。您现在可以从gem文件访问指定gem版本的二进制文件。您可以使用/bin/rake
编辑:如您所述,您还可以创建单独的宝石来推迟问题的解决。不过,有时当您更新分支上的gem,然后切换时,您仍然会收到错误。这个问题在rubygems 2.0中已修复-加载任何可执行gem时,都可以考虑Gemfile 至于您的问题,RVM随my gem installed
rubygems bundler
一起提供,如果可能的话,它应该自动解决依赖关系-如果没有安装正确的版本,它会退回到您的问题上,在这种情况下,有一张票可以更改情况以引发异常-
基本上-确保在项目中执行任何操作之前运行
bundle install
,并且rubygems bundler
将确保运行正确版本的gems。我的问题是安装了rake 10.0.2,但另一个Rails应用程序也导致安装了10.0.3,因此,即使在我的原始应用程序中运行bundle安装,我仍然会遇到上述错误。运行gem列表的相关行是:rake(10.0.3、10.0.2、0.9.2.2ruby、0.8.7)。看起来,正如Yves Senn在下面所说的那样,Rails运行的是最新版本的gem,而不管gem文件中有什么;gem重新生成容器。如上所述,它应该注意选择合适的rake版本。啊,我没有意识到你必须单独安装rubygems bundler。这是有道理的,thanksrvm在默认情况下安装了rubygems bundler,如果ruby是在非常旧的rvm中编译的,您可能会丢失它,否则它可能是一个bug,应该报告以供调查