错误:rb_gc()上的跨线程冲突

时间:2010-08-05 09:06:04

标签: ruby-on-rails macos

我是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

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

3 个答案:

答案 0 :(得分:10)

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

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

  

总线错误/段错误

[BUG] cross-thread violation on rb_gc()
     

在我所见过的每一个案例中,它总是最终结束   是一个带有C扩展的ruby gem /库是针对a编译的   不同的红宝石和/或架构,而不是试图加载的   它。尝试卸载&重新安装带有C扩展名的宝石   应用程序用于捕获这个bugger。

json gem是一个常见的罪魁祸首,但是有一长串人们曾经遇到过的其他宝石。我不确定如何弄清楚究竟哪个宝石造成了这个问题,但如果你使用rvm和gemsets,你可以随时rvm gemset empty并用Bundler重新安装所有宝石。

答案 1 :(得分:4)

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

我通过以下方式解决了问题:

  1. 从Macports卸载ruby版本
  2. 安装Ruby Version Manager,又称rvm,以帮助我管理多个ruby安装。 (可选,但建议)
  3. 我也在Ruby on Rails Talk上发布了这个帖子。见Error: cross-thread violation on rb_gc()

答案 2 :(得分:4)

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

  

我可以将这个错误归结为原生扩展   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   版。这应该可以解决问题。

     

干杯多米尼克

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