2010-08-05 4 views
13

Je suis nouveau sur Ruby on Rails.Erreur: violation de threads croisés sur rb_gc()

Je courais le suivant dans un terminal quand je traversais la création d'un tutoriel blog avec Rails:

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

Abort trap 

Comment puis-je savoir ce que ce message d'erreur signifie et comment y remédier?

$ 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 

MISE À JOUR

J'ai fait quelques tripoter et je ne reçois pas le message d'erreur plus. Mais je remarque que mon environnement fonctionne actuellement différemment de 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 

Cela semble impliquer que j'ai plusieurs installations de Ruby sur mon Mac. Un dans/opt/local/bin/et/usr/bin /. Je pense que le premier vient d'une installation MacPorts, et le dernier est ce qui est venu avec mon système (éventuellement mis à jour).

+1

Je recevais la même erreur. Je pense que c'était un problème avec mes gemmes installées. J'ai effacé les gemmes installées et l'erreur est partie. Par coïncidence ou non, les GEM PATHS dans vos versions de travail vs non-travail sont différents. –

Répondre

4

Le problème était que j'avais plusieurs installations/chemins de ruby ​​sur mon système. Mac OS X Snow Leopard est livré avec ruby ​​pré-installé, je crois. J'ai fait l'erreur d'utiliser MacPorts pour installer une nouvelle version, juste à côté.

Je résolu le problème par:

  1. Désinstaller la version de rubis de Macports
  2. Installation Ruby Version Manager, alias RVM, me aider à gérer installe rubis multiples. (facultatif, mais recommandé)

J'ai également posté cela sur Ruby on Rails Talk. Voir Error: cross-thread violation on rb_gc()

4

J'ai eu un problème similaire en installant buildr gem (en utilisant rvm). solution This a permis:

I could nail this bug down to the native extensions of the ruby-java-bridge (rjb) on Mac OSX. What you want to do to fix this is the following:

gem uninstall rjb 
gem uninstall buildr 

When asked just uninstall all versions.

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

This will install the ruby version of rjb and not the native darwin version. This should fix the issue.

Cheers Dominic

Bien que, ce n'est pas liée à la question, cela peut aider ceux qui recherche le même message d'erreur.

+0

Cette construction fixe pour moi aussi.Merci – mawaldne

10

Cela peut arriver avec toutes sortes de gemmes et semble avoir à voir avec une gemme avec des extensions C compilées sur un ruby ​​différent de celui qui essaie de le charger.

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

Bus Error/Segfault

[BUG] cross-thread violation on rb_gc() 

In every case of this I have seen thus far it has always ended up being that a ruby gem/library with C extensions was compiled against a different ruby and/or architecture than the one that is trying to load it. Try uninstalling & reinstalling gems with C extensions that your application uses to hunt this bugger down.

Le joyau JSON est un coupable fréquent, mais il y a une longue liste d'autres pierres précieuses que les gens ont eu problème avec. Je ne suis pas sûr de savoir exactement quelle gemme est à l'origine du problème, mais si vous utilisez rvm avec gemsets, vous pouvez toujours rvm gemset empty et réinstaller toutes vos gemmes avec Bundler.

+1

Bonne suggestion - j'avais mucked mon installation bundle et la moitié avec un rubis et la moitié avec un autre et rms gemset vide était exactement ce qu'il fallait pour redresser les choses. –

Questions connexes