错误: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 

这似乎意味着我在我的Mac机箱上安装了多个Ruby。 一个在/ opt / local / bin /和/ usr / bin /中。 我认为前者来自MacPorts安装,而后者是我的系统(可能已升级)。

这种情况可能发生在各种各样的gem上,而且似乎与一个带有C扩展的gem有关,这个扩展是针对不同的ruby编译的,而不是试图加载它的那个。

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

总线错误/ Segfault

 [BUG] cross-thread violation on rb_gc() 

在我所看到的每一个例子中,我总是最终得到一个带有C扩展的ruby gem /库是针对不同的ruby和/或体系结构编译的,而不是试图加载它的那个。 尝试卸载并重新安装带有C扩展名的gem,应用程序使用这些扩展来查找此bugger。

json gem是一个常见的罪魁祸首,但是有一长串其他gem已被人们所质疑。 我不知道如何弄清楚究竟是哪个gem造成了这个问题,但是如果你使用rvm和gemsets,你可以将rvm gemset empty并用Bundler重新安装所有gem。

问题是我的系统上有多个ruby安装/路径。 我相信Mac OS X Snow Leopard预装了ruby。 我错误地使用MacPorts来安装更新的版本。

我通过以下方式修复了问题

  1. 从Macports卸载ruby版本
  2. 安装Ruby Version Manager ,又称rvm,帮助我管理多个ruby安装。 (可选,但建议)

我还在Ruby on Rails Talk上发布了这个。 请参阅错误:rb_gc()上的跨线程冲突

我在安装buildr gem时遇到了类似的问题(使用rvm )。 该解决方案帮助:

我可以将这个错误归结为Mac OSX上ruby-java-bridge(rjb)的原生扩展。 您要解决此问题的方法如下:

 gem uninstall rjb gem uninstall buildr 

当被要求卸载所有版本时。

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

这将安装ruby版本的rjb而不是本机darwin版本。 这应该可以解决问题。

干杯多米尼克

虽然,它与问题无关,但这可能会帮助那些寻找相同错误消息的人。