Ошибка: нарушение многопоточности в 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 для установки более новой версии, прямо рядом.
Я исправил проблему следующим образом:
- Удаление версии ruby из Macports
- Установка 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. Это должно решить проблему.
Ура Доминик
Хотя это не связано с вопросом, это может помочь тем, кто будет искать одно и то же сообщение об ошибке.