我在OSX和Ubuntu中使用相同的rails应用程序,我想使用Zeus加速我的rspec。
在Ubuntu中,Zeus启动Ok,但在OSX中它总是崩溃。
最后我发现问题,https://github.com/burke/zeus/issues/237#issuecomment-18700462 OSX和Ubuntu之间的区别是json gem的版本。
我用gem list | grep json
Ubuntu显示
json (1.8.1, 1.8.0, 1.5.3)
json_pure (1.5.3)
json_spec (1.1.1)
jsonpath (0.5.3)
multi_json (1.8.2, 1.7.8, 1.0.3)
Mac显示
json (1.8.1, 1.7.7)
json_spec (1.1.1)
jsonpath (0.5.5, 0.5.3)
multi_json (1.8.2, 1.7.8)
所以我想卸载1.7.7版本的json gem以使zeus启动,但是
gem uninstall json -v 1.7.7
ERROR: While executing gem ... (Gem::InstallError)
gem "json" cannot be uninstalled because it is a default gem
我该怎么办?
答案 0 :(得分:18)
基于我所知道的,没有简单的命令可以将gemspec文件从默认文件夹移动到无默认文件夹。从我所知道的这是一件好事,但这里是如何手动执行此操作的说明。
找到默认规范的位置。简单的方法是进入irb
并运行跟随命令
irb(main):001:0> File.join Gem::Specification.default_specifications_dir
=> "/Users/newdark/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/specifications/default"
这是构建gemspec路径的代码行 https://github.com/rubygems/rubygems/blob/v2.6.13/lib/rubygems/installer.rb#L420
获得文件路径后,只需将gem名称和版本从默认文件夹移动到父文件夹即可。
$ cd /Users/newdark/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/specifications/default
$ mv json-1.7.7.gemspec ../
如果你gem list -d
,你不应再看到宝石版json-1.7.7旁边的单词Installed at (default)
。然后,您可以运行gem uninstall json -v 1.7.7
而不与它作斗争。如果您要撤消所有这些,请运行gem install json -v 1.7.7 --default
答案 1 :(得分:4)
可能会对你有帮助....
bundle exec gem uninstall GEM_NAME
如果上面的cmd不起作用,那么试试这个
在irb或正确的脚本中执行此操作:
`gem list --no-versions`.split("\n").each do |gem|
`gem list -d #{gem}`.gsub(/Installed at(.*):.*/).each do |dir|
dir = dir.gsub(/Installed at(.*): /,'').gsub("\n", '')
system "gem uninstall #{gem} -aIx -i #{dir}"
end
end
如果两者都失败,那么试试这个
转到你的rvm dir ..安装所有宝石的地方然后手动删除你想要的那个宝石..比如我的宝石目录位置是/home/user_name/.rvm/gems/ruby-1.9.3 -p194 /宝石
答案 2 :(得分:4)
我遇到了宝石默认版本的问题,并且接受的答案对我不起作用。对我有用的是安装与默认版本相同的版本,但没有默认标志,然后将其卸载。
gem install json -v '1.7.7'
然后一旦完成:
gem uninstall json -v '1.7.7'