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

spo*_*ong 13 macos ruby-on-rails

我是Ruby on Rails的新手.

当我使用Rails创建博客教程时,我在终端中运行了以下内容:

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

Abort trap
Run Code Online (Sandbox Code Playgroud)

如何确定此错误消息的含义以及如何解决?

$ 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

mmr*_*ins 10

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

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

总线错误/ Segfault

[BUG] cross-thread violation on rb_gc()
Run Code Online (Sandbox Code Playgroud)

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

json gem是一个常见的罪魁祸首,但是有很多其他宝石已被人们所关注.我不确定如何弄清楚究竟哪个宝石造成了问题,但是如果你正在使用rvm和gemsets,你可以随时rvm gemset empty使用Bundler重新安装所有宝石.


spo*_*ong 4

问题是我的系统上有多个 ruby​​ 安装/路径。我相信 Mac OS X Snow Leopard 预装了 ruby​​。我犯了一个错误,即使用 MacPorts 安装较新的版本。

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

  1. 从 Macports 卸载 ruby​​ 版本
  2. 安装Ruby Version Manager(又名 rvm)来帮助我管理多个 ruby​​ 安装。(可选,但推荐)

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