Ошибка: нарушение кросс-потоков на 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
UPDATE
Я немного поиграл, и я больше не получаю сообщение об ошибке. Но я замечаю, что моя среда теперь запускает другой путь 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, а последний - с моей системой (возможно, обновлен).
Ответы
Ответ 1
Проблема заключалась в том, что у меня в моей системе было несколько установок/путей ruby. Я уверен, что Mac OS X Snow Leopard поставляется с предварительно установленным рубином. Я допустил ошибку при использовании MacPorts для установки более новой версии, рядом с ней.
Я исправил проблему:
- Удаление версии ruby из Macports
- Установка Ruby Version Manager, aka rvm, чтобы помочь мне управлять несколькими установками ruby. (необязательно, но рекомендуется)
Я также разместил это на Ruby on Rails Talk. См. Ошибка: нарушение кросс-потоков на rb_gc()
Ответ 2
Это может произойти со всеми видами драгоценных камней и, похоже, связано с драгоценным камнем с расширениями C, скомпилированными против другого рубина, чем тот, который пытается загрузить его.
https://rvm.io/support/troubleshooting/
Ошибка /Segfault шины
[BUG] cross-thread violation on rb_gc()
В каждом случае этого я видел, что до сих пор он всегда заканчивался что рубиновая жемчужина/библиотека с расширениями C была скомпилирована против другой рубин и/или архитектура, чем тот, который пытается загрузить Это. Попробуйте удалить и переустановить драгоценные камни с помощью C-расширений, которые приложение использует для поиска этого отбойщика.
Драгоценный камень json является частым преступником, но есть длинный список других драгоценных камней, с которыми люди сталкивались. Я не уверен, как определить, какой именно камень вызывает проблему, но если вы используете rvm с gemset, вы всегда можете rvm gemset empty
и переустановите все свои драгоценные камни с помощью Bundler.
Ответ 3
У меня была аналогичная проблема с установкой buildr
gem (с помощью 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
Это установит рубиновую версию rjb, а не родную darwin версия. Это должно решить проблему.
Cheers Dominic
Хотя это не связано с вопросом, это может помочь тем, кто будет искать одно и то же сообщение об ошибке.