Ошибка RubyGems после обновления системы

#ruby-on-rails #rubygems #ruby-on-rails-3.1 #rvm

#ruby-on-rails #rubygems #ruby-on-rails-3.1 #rvm

Вопрос:

При попытке запустить консоль rails после обновления моей настройки ruby с помощью «sudo gem update —system» я затем пытаюсь запустить консоль rails, выдав rails c

Я получаю эту ошибку:

 Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find json (~> 1.4) amongst [Ascii85-1.0.1, abstract-1.0.0, actionmailer-3.1.1, actionmailer-3.1.0, actionmailer-3.0.9, actionmailer-3.0.5, actionmailer-3.0.3, actionpack-3.1.1, actionpack-3.1.0, actionpack-3.0.9, actionpack-3.0.5, actionpack-3.0.3, activemodel-3.1.1, activemodel-3.1.0, activemodel-3.0.10, activemodel-3.0.9, activemodel-3.0.5, activemodel-3.0.3, activerecord-3.1.1, activerecord-3.1.0, activerecord-3.0.9, activerecord-3.0.5, activerecord-3.0.3, activeresource-3.1.1, activeresource-3.1.0, activeresource-3.0.9, activeresource-3.0.5, activeresource-3.0.3, activesupport-3.1.1, activesupport-3.1.0, activesupport-3.0.10, activesupport-3.0.9, activesupport-3.0.5, activesupport-3.0.3, addressable-2.2.6, ansi-1.3.0, arel-2.2.1, arel-2.0.10, arel-2.0.9, arel-2.0.7, bcrypt-ruby-3.0.1, bcrypt-ruby-3.0.0, bcrypt-ruby-2.1.4, builder-3.0.0, builder-2.1.2, bundler-1.0.21, bundler-1.0.18, bundler-1.0.11, choices-0.2.4, cocaine-0.2.0, coffee-rails-3.1.1, coffee-rails-3.1.0, coffee-script-2.2.0, coffee-script-source-1.1.2, devise-1.4.8, devise-1.4.2, erubis-2.7.0, erubis-2.6.6, execjs-1.2.9, execjs-1.2.6, execjs-1.2.4, faraday-0.7.4, faraday-0.6.1, faraday_middleware-0.7.0, faraday_middleware-0.6.3, fastercsv-1.5.4, formtastic-2.0.2, formtastic-1.2.4, geocoder-1.0.4, geocoder-1.0.2, has_scope-0.5.1, hashie-1.1.0, hashie-1.0.0, heroku-2.7.0, hike-1.2.1, i18n-0.6.0, i18n-0.5.0, inherited_resources-1.3.0, inherited_resources-1.2.2, jquery-rails-1.0.16, jquery-rails-1.0.14, kaminari-0.12.4, launchy-2.0.5, libv8-3.3.10.2-x86_64-darwin-10, mail-2.3.0, mail-2.2.19, mail-2.2.15, mail-2.2.14, mechanize-2.0.1, mechanize-1.0.0, meta_search-1.1.1, meta_search-1.0.6, mime-types-1.16, multi_json-1.0.3, multi_xml-0.4.1, multi_xml-0.4.0, multi_xml-0.3.0, multi_xml-0.2.2, multipart-post-1.1.3, multipart-post-1.1.2, mysql-2.8.1, mysql2-0.3.7, mysql2-0.2.7, mysql2-0.2.6, net-http-digest_auth-1.1.1, net-http-persistent-2.1, net-http-persistent-2.0, net-http-persistent-1.9, nokogiri-1.5.0, nokogiri-1.4.4, orm_adapter-0.0.5, pdf-reader-0.10.0, pg-0.11.0, polyamorous-0.5.0, polyglot-0.3.2, polyglot-0.3.1, prawn-0.12.0, rack-1.3.4, rack-1.3.3, rack-1.3.2, rack-1.2.3, rack-1.2.2, rack-1.2.1, rack-cache-1.1, rack-cache-1.0.3, rack-mount-0.8.3, rack-mount-0.6.14, rack-mount-0.6.13, rack-ssl-1.3.2, rack-test-0.6.1, rack-test-0.5.7, rails-3.1.1, rails-3.1.0, rails-3.0.9, rails-3.0.5, rails-3.0.3, railties-3.1.1, railties-3.1.0, railties-3.0.9, railties-3.0.5, railties-3.0.3, rake-0.9.2, rake-0.8.7, rake-0.8.7, rash-0.3.1, rash-0.3.0, rdoc-3.10, rdoc-3.9.4, rdoc-3.9.2, responders-0.6.4, rest-client-1.6.7, rubygems-update-1.8.11, rubygems-update-1.8.10, rubygems-update-1.7.2, rubygems-update-1.7.1, rubygems-update-1.6.2, rubyzip-0.9.4, sass-3.1.10, sass-3.1.7, sass-rails-3.1.4, sass-rails-3.1.2, sass-rails-3.1.0, simple_oauth-0.1.5, sprockets-2.0.2, sprockets-2.0.0, sqlite3-1.3.4, term-ansicolor-1.0.6, therubyracer-0.9.4, thor-0.14.6, tilt-1.3.3, treetop-1.4.10, treetop-1.4.9, ttfunk-1.0.3, ttfunk-1.0.2, turn-0.8.2, twitter-1.7.1, twitter-1.4.1, tzinfo-0.3.30, tzinfo-0.3.29, tzinfo-0.3.26, tzinfo-0.3.24, uglifier-1.0.3, warden-1.0.6, warden-1.0.5, webrobots-0.0.12, webrobots-0.0.11] (Gem::LoadError)
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1932:in `block in traverse'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1931:in `each'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1931:in `traverse'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:465:in `block in find_in_unresolved_tree'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:463:in `reverse_each'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:463:in `find_in_unresolved_tree'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:47:in `require'
from /Users/myusername/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.1.1/lib/rails/script_rails_loader.rb:1:in `<top (required)>'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
from /Users/myusername/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.1.1/lib/rails/cli.rb:2:in `<top (required)>'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
from /Users/myusername/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
from /Users/myusername/.rvm/gems/ruby-1.9.2-p136/gems/rails-3.1.1/bin/rails:7:in `<top (required)>'
from /Users/myusername/.rvm/gems/ruby-1.9.2-p136/bin/rails:19:in `load'
from /Users/myusername/.rvm/gems/ruby-1.9.2-p136/bin/rails:19:in `<main>'
  

Есть идеи?

Комментарии:

1. Вы запустили bundle install ?

2. @AshleyWilliams да, я это запустил. Есть еще идеи?

3. Попробуйте добавить gem "json", "~> 1.4" непосредственно в свой Gemfile (и запустить bundle install ). rails server Работает нормально, это просто rails console ?

4. @AshleyWilliams это сделало свое дело. Почему это требуется, когда я на самом деле не использую его?

5. Я думаю, это проще, чем лениво загружать его. Большинство приложений все равно его используют. Я добавил свой комментарий в качестве ответа ниже, чтобы другим было легче его найти.

Ответ №1:

что вы получаете, когда пытаетесь перечислить свои драгоценные камни .. есть ли json> = 1.4?

например:

 > gem list json

*** LOCAL GEMS ***

json (1.6.1, 1.5.4, 1.5.3, 1.5.1, 1.4.2)
json_pure (1.6.1, 1.5.4, 1.5.3)
  

если вы используете наборы драгоценных камней RVM, вы можете также перечислить их, чтобы проверить, изменился ли ваш набор драгоценных камней по умолчанию:

 rvm gemset list
  

РЕДАКТИРОВАТЬ: Загадка решена! 🙂

вы случайно установили свои драгоценные камни с помощью sudo — но у вас установлен RVM для вашей учетной записи пользователя!

Когда у вас установлен RVM для отдельного пользователя, обычно не рекомендуется выполнять установку sudo gem … , но вы должны установить gems только для локального пользователя и позволить RVM управлять ими для любой версии Ruby, которую вы используете.

Если вы все еще устанавливаете с помощью sudo, RVM не найдет драгоценные камни, потому что они хранятся в другом месте, за пределами RVM, и не ищутся RVM …! Похоже, это тот случай, с которым вы столкнулись.

Проверьте этот RailsCast: http://railscasts.com/episodes/200-rails-3-beta-and-rvm

если вы используете Rails: — отредактируйте свой Gemfile и добавьте зависимость json, затем запустите bundle install

если вы просто используете Ruby сам по себе, или старую версию, или Ruby: — запуск gem install json в оболочке

С более новыми версиями Ruby вы не должны вручную устанавливать драгоценные камни

Комментарии:

1. когда я запускаю gem list json , он не появляется … хотя он определенно установлен sudo gem install json . При запуске rvm gemset list он выдает следующее: gemsets for ruby-1.9.2-p136 (found in /Users/elliottheis/.rvm/gems/ruby-1.9.2-p136) глобальный. Есть идеи?

2. похоже, вы случайно использовали ‘sudo’.. вы не должны использовать его, если у вас установлен RVM для вашей локальной учетной записи пользователя

3. @Tilo стоило бы удалить установленную rvm версию ruby и начать все сначала, поскольку у меня такое ощущение, что я сделал это для пары драгоценных камней… Можете ли вы дать несколько указаний относительно того, как я могу этого добиться (я использую OS X Lion)?

4. Я бы сохранил RVM, версию Ruby, установленную на RVM, и установленные на RVM драгоценные камни — и удалил бы установленные sudo драгоценные камни с помощью «sudo gem uninstallXYZ»

5. @Eliot лучше удалить установленные драгоценные камни sudo! а затем просто установите их, как описано выше — как ваш пользователь

Ответ №2:

Добавьте gem "json", "~> 1.4" в свой Gemfile и запустите bundle install

Ответ №3:

Также

Вы используете команду sudo только в процессе установки. В многопользовательских конфигурациях любые операции, требующие доступа sudo, должны использовать команду rvmsudo, которая сохраняет среду RVM и передает ее в sudo. Существует очень мало случаев, когда после завершения установки ядра требуется rvmsudo, за исключением случаев обновления самого RVM. Никогда не бывает причин использовать sudo после установки. После того, как пользователи, добавленные в группу ‘rvm’, вышли из системы, а затем вернулись, чтобы получить членство в группе rvm, rvmsudo должен быть необходим только для обновления самого RVM с помощью

 rvmsudo rvm get head
  

Пожалуйста, прочитайте https://rvm.beginrescueend.com/support/troubleshooting / страница Страница установщика также подробно описывает это для новых установок. Вам нужно будет удалить существующую установку и переделать ее, чтобы правильно перенастроить разрешения. В будущем никогда не используйте sudo при работе с вашей установкой RVM, кроме как при установке. Любые другие команды не потребуют использования sudo, за исключением

 rvmsudo rvm get head
  

чтобы обновить вашу установку. Если пользователи правильно размещены в группе rvm, как описано на сайте, вам вообще не нужно будет использовать sudo, а rvmsudo только для обновления.

Кроме того, RVM вообще не управляет установленным ruby в системе! Мы предоставляем использование

 rvm use system
  

для того, чтобы дать естественный способ переключения между рубинами, управляемыми RVM, и системой. Ваш менеджер пакетов или его отсутствие для OS X отвечает за управление установленным ruby в вашей системе и находится вне контроля RVM 100%.