Как я могу удалить драгоценный камень по умолчанию? ! хотите удалить версию JSON Gem 1.7.7

У меня такое же приложение rails в OSX и Ubuntu, я хочу использовать Zeus, чтобы ускорить мой rspec. В Ubuntu Zeus запускается нормально, но в 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

Что я должен делать?

Ответ 1

Исходя из того, что я могу сказать, нет простой команды, которая может переместить файл gemspec из папки по умолчанию в папку не по умолчанию. Это хорошо из того, что я могу сказать, но здесь приведены инструкции о том, как сделать это вручную.

  1. Найти расположение спецификации по умолчанию. Самый простой способ - зайти в 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

  1. Как только вы получите путь к файлу, вам просто нужно переместить имя и версию гема из папки по умолчанию в родительскую папку.

    $ 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, вы больше не увидите слова Installed at (default) рядом с версией гема json-1.7.7. затем вы можете запустить gem uninstall json -v 1.7.7 без боя с вами. Если вы хотите отменить все это, просто запустите gem install json -v 1.7.7 --default

Ответ 2

У меня возникла проблема с стандартными версиями драгоценных камней, и принятый ответ не сработал у меня. Для меня работала установка такой же версии, как и по умолчанию, но без флага по умолчанию, а затем ее удаление.

gem install json -v '1.7.7'

Затем, как только это будет завершено:

gem uninstall json -v '1.7.7'

Ответ 3

может быть, это поможет вам....

bundle exec gem uninstall GEM_NAME

Если выше cmd не работает, попробуйте это

выполните это либо в irb, либо в собственном script:

`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 dir -/home/user_name/.rvm/gems/ruby-1.9.3 -p194/камни