我怎样才能删除默认的gem? ! 想要卸载json的gem 1.7.7版本

我在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 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 

我该怎么办? 任何帮助将不胜感激!

因此,根据我所知,没有简单的命令可以将gemspec文件从默认文件夹移动到无默认文件夹。 从我能说的是这是一件好事,但这里是如何手动完成这些操作的说明。

  1. 找到默认规范的位置。 Easies方式是进入irb并运行follow命令

     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

  1. 获得文件路径后,只需将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你不应该再看到gem版本json-1.7.7旁边的Installed at (default) 。 然后你就可以运行gem uninstall json -v 1.7.7了。 如果要撤消所有这些,只需运行gem install json -v 1.7.7 --default

可能这会帮助你……

 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目录..所有gem都安装在那里然后手动删除你想要的gem..例如在我的情况下我的gem目录位置是/home/user_name/.rvm/gems/ruby-1.9.3-p194/gem

我一直遇到默认版本的gem问题,并且接受的答案对我不起作用。 对我有用的是安装与默认版本相同的版本,但没有默认标志,然后卸载它。

 gem install json -v '1.7.7' 

一旦完成:

 gem uninstall json -v '1.7.7'