Ошибка: нарушение многопоточности в rb_gc()

Я новичок в Ruby on Rails.

Я запустил следующее в терминале, когда создавал учебник по блогам с Rails:

$ rails blog
[BUG] cross-thread violation on rb_gc()
(null)

Abort trap

Как определить, что означает это сообщение об ошибке и как его исправить?

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2010-06-23 patchlevel 299) [i686-darwin10]
  - INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-10
  - GEM PATHS:
     - /opt/local/lib/ruby/gems/1.8
     - /Users/sunpech/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/", "http://gems.github.com"]
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gems.github.com

ОБНОВИТЬ

Я немного повозился и больше не получаю сообщения об ошибке. Но я замечаю, что в моей среде сейчас другой путь Ruby.

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.5
  - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-10
  - GEM PATHS:
     - /Library/Ruby/Gems/1.8
     - /Users/sunpech/.gem/ruby/1.8
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/", "http://gems.github.com"]
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gems.github.com

Кажется, это подразумевает, что у меня есть несколько установок Ruby на моем компьютере Mac. Один в / opt / local / bin / и / usr / bin /. Я думаю, что первое пришло из установки MacPorts, а второе - то, что пришло с моей системой (возможно, обновленной).

3 ответа

Решение

Проблема заключалась в том, что в моей системе было несколько установок / путей ruby. Я считаю, что Mac OS X Snow Leopard поставляется с предустановленным Ruby. Я сделал ошибку, используя MacPorts для установки более новой версии, прямо рядом.

Я исправил проблему следующим образом:

  1. Удаление версии ruby ​​из Macports
  2. Установка Ruby Version Manager, также известного как rvm, помогает мне управлять несколькими установками ruby. (необязательно, но рекомендуется)

Я также разместил это на Ruby on Rails Talk. См. Ошибка: нарушение многопоточности в rb_gc()

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

https://rvm.io/support/troubleshooting/

Ошибка шины / Segfault

[BUG] cross-thread violation on rb_gc()

В каждом случае, который я видел до сих пор, всегда заканчивалось тем, что гем / библиотека ruby ​​с расширениями C был скомпилирован с использованием другого ruby ​​и / или архитектуры, чем тот, который пытается его загрузить. Попробуйте удалить и переустановить гемы с расширениями C, которые ваше приложение использует для поиска этого баггера.

Драгоценный камень json - частый преступник, но есть длинный список других драгоценных камней, с которыми у людей были проблемы. Я не уверен, как точно определить, какой гем вызывает проблему, но если вы используете rvm с гемсетами, вы всегда можете rvm gemset empty и переустановите все ваши драгоценные камни с Bundler.

У меня была похожая проблема при установке buildr драгоценный камень (используя rvm). Это решение помогло:

Я мог бы прибить эту ошибку к родным расширениям ruby-java-bridge (rjb) на Mac OSX. Что вы хотите сделать, чтобы это исправить:

gem uninstall rjb
gem uninstall buildr

При появлении запроса просто удалите все версии.

gem install rjb -v 1.3.3 --platform ruby
gem install buildr

Это установит ruby-версию rjb, а не нативную версию darwin. Это должно решить проблему.

Ура Доминик

Хотя это не связано с вопросом, это может помочь тем, кто будет искать одно и то же сообщение об ошибке.

Другие вопросы по тегам