繁体   English   中英

安装了Rails 3.1 gem的环境中的Bundler错误

[英]Bundler errors in environment with Rails 3.1 gem installed

我已经安装了Rails 3.0.10和3.1,因为我试图将它们用于两个不同的项目。

在我的Rails 3.0.10项目中,我在Gemfile的顶部有以下内容:

gem 'rails', '3.0.10'

但是,运行bundle install; bundle exec rails --version bundle install; bundle exec rails --version ,我得到以下内容:

/Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:31:in `setup': You have already activated activesupport 3.1.1, but your Gemfile requires activesupport 3.0.10. Using bundle exec may solve this. (Gem::LoadError)
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:17:in `setup'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/cli.rb:340:in `exec'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `send'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor.rb:263:in `dispatch'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/vendor/thor/base.rb:386:in `start'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/bundler-1.0.21/bin/bundle:13
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/bin/bundle:19:in `load'
    from /Users/bradley/.rbenv/versions/ree-1.8.7-2011.03/bin/bundle:19

有任何想法吗? 显然,我已经在使用bundle execbundle show rails; bundle show activesupport bundle show rails; bundle show activesupport确认我应该使用正确版本的gem。 我只需要卸载Rails 3.1吗?

我遇到了同样的问题。

即使我明确指定要在我的Gemfile中使用的activesupport版本:

gem 'rails', '3.2.9'
gem 'activesupport', '3.2.9'

当我运行bundle exec rails s时,它仍然给我这个错误:

/home/tyler/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.0.18/lib/bundler/runtime.rb:31:in `block in setup':
You have already activated activesupport 3.2.10, but your Gemfile requires activesupport 3.2.9. Consider using bundle exec. (Gem::LoadError)

当我想在我的应用程序中尝试回到旧版本的Rails来测试两个版本的Rails之间的差异时,这种情况就发生了。

因此,即使为我的应用程序创建单独的gemset(我们通常也会这样做)也无法解决问题,因为gemset被这个应用程序本身“污染”(在返回到Rails 3.2之前暂时安装/使用Rails 3.2.10)。 9),而不是其他一些应用程序!

到目前为止,我发现的唯一解决方案卸载您不希望它使用的较新版本:

gem uninstall activesupport -v 3.2.10

看起来这可能是Bundler中的一个bug或Rails中的一个错误(如果它加载Bundler 之前会导致activesupport被加载/激活,那么我们就不能真正责怪Bundler ...)。

另一个同样糟糕的解决方案:暂时禁用新版本的gem 而不卸载它,您可以编辑gem的规范文件(例如/home/tyler/.rvm/gems/ruby-1.9.3-p194/specifications/activesupport-3.2.10.gemspec )并在顶部添加一行raise 'disabled' Bundler将跳过加载activesupport 3.2.10 (在救出并打印错误之后)并继续加载它可以找到的下一个最高版本的activesupportactivesupport 3.2.9 )。

当您准备重新启用activesupport 3.2.10 ,只需删除raise

这可能比卸载和重新安装gem更快,如果你只是想在使用旧版本的东西之前测试它们,那么在回到它们的更新版本之前。

在我的gem文件中,我将rails版本更改为我当前的版本:

宝石'轨道','3.2.2'

我执行了命令:bundle update

错误就消失了

在每个RAILS_ROOT目录中创建一个'.rvmrc'文件(所以在每个项目的根目录下)

填写:

vm_install_on_use_flag=1
rvm_gemset_create_on_use_flag=1
rvm use ruby-1.9.2-p290@APPNAME

每个应用的APPNAME都不同。 CD从应用程序目录开始然后重新进入。当你进入CD时,说是信任宝石套装。 然后在每个中运行Bundle install。

您创建了2个gemsets,每个项目一个,因此没有应用程序的交叉授权。 这应该解决问题。

这可能不合适,但使用Ruby Version Manager(RVM)。

它将允许您管理多个ruby版本安装以及所谓的gemsets ,它允许您维护所有gem的全局回购(每个gem的diff版本),并设置您希望在任何给定时间使用哪个。

除此之外,请查看清理已安装的宝石并重新开始:

gem clean -d # dry mode will simply tell you what will get cleaned

gem clean -v # will remove all older versions of every single gem

除此之外,您可以强制删除rails gem及其依赖项(您可以检查rails版本具有哪些依赖项)

gem uninstall actionmailer actionpack activerecord activesupport acriveresource rails -v=3.1.0

希望有所帮助。 干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM