我是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安装,而后者是我的系统附带的(可能已升级)。
答案 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来安装更新版本。
我通过以下方式解决了问题:
我也在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 版。这应该可以解决问题。
干杯多米尼克
虽然它与问题无关,但这可能有助于那些寻找相同错误信息的人。