Ошибка: нарушение кросс-потоков на 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

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