捆绑的gem和datamapper的问题:与muti_json版本冲突?

时间:2012-05-13 03:35:14

标签: ruby sinatra rvm bundler datamapper

我有一个运行nginx / unicorn / sinatra(bundler / rvm)的网站。 在我上一次bundle update之后,我收到了一个错误:

in `raise_if_conflicts': Unable to activate dm-serializer-1.2.1, because multi_json-1.3.5 conflicts with multi_json (~> 1.0.3)

我的Gemfile是:

source "http://rubygems.org"

gem 'unicorn'
gem 'sinatra'
gem 'datamapper'
gem 'dm-mysql-adapter'
gem 'haml'
gem 'sass'
gem 'omniauth-twitter'

Gemfile.lock没有对multi_json 1.0.3的任何引用

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

解决方案是:

  • 检查Gemfile.lock以查看哪些gem带入更高版本(在本例中为omniauth-twitter)
  • 查找不需要太高版本的“罪犯”版本
  • 回滚更高版本,锁定到Gemfile中的正确版本

在这种特殊情况下,Gemfile可以运行所需的行:

gem 'omniauth-twitter', '0.0.9'
gem 'multi_json', '~> 1.0.3'

答案 1 :(得分:0)

您的捆绑包中的一个宝石具有旧版本的multi_json作为它的依赖关系。看看bundle viz是否告诉您。如果你还没有安装ruby-graphviz gem和graphviz,你需要安装它们。

另一种查看内容的方法是将multi_json添加到您尝试升级到的版本的gemfile中,然后执行bundle install并查看出现的错误。

答案 2 :(得分:0)

这是解决此问题的方法:

rvm uninstall multi_json

它会告诉您安装了许多版本,显示了它们的列表,并询问您要卸载哪个版本。
尝试第一个,如果它告诉你它被其他宝石使用,请尝试第二个,依此类推。继续删除所有未使用的版本,直到只剩下一个。

我就是这样做的,但可能有一些 clearner 解决方案。如果有人知道,感谢您与我们分享。