2010-08-05 28 views
13

Tôi mới dùng Ruby on Rails.Lỗi: vi phạm chủ đề chéo trên rb_gc()

Tôi chạy sau trong một thiết bị đầu cuối khi tôi đang diễn ra thông qua việc tạo một hướng dẫn blog với Rails:

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

Abort trap 

Làm thế nào để xác định những thông báo lỗi này có nghĩa và làm thế nào để sửa chữa nó?

$ 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 

CẬP NHẬT

tôi đã làm một số không quan trọng và tôi không nhận được thông báo lỗi nữa. Nhưng tôi nhận thấy rằng môi trường của tôi đang chạy một con đường khác của Ruby bây giờ.

$ 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 

Điều này có vẻ hàm ý rằng tôi có nhiều lần cài đặt Ruby trên hộp Mac. Một trong/opt/local/bin/và/usr/bin /. Tôi nghĩ rằng cựu đến từ một MacPorts cài đặt, và sau này là những gì đi kèm với hệ thống của tôi (có thể nâng cấp).

+1

Tôi đã gặp lỗi tương tự. Tôi nghĩ rằng đó là một vấn đề với đá quý được cài đặt của tôi. Tôi đã xóa sạch những viên đá quý đã cài đặt và lỗi đã biến mất. Thật trùng hợp hay không, GEM PATHS trong các phiên bản làm việc và không hoạt động của bạn khác nhau. –

Trả lời

4

Vấn đề là tôi có nhiều lần cài đặt/đường dẫn của ruby ​​trên hệ thống của mình. Mac OS X Snow Leopard được cài đặt sẵn ruby. Tôi đã mắc lỗi khi sử dụng MacPorts để cài đặt phiên bản mới hơn, ngay bên cạnh.

Tôi cố định vấn đề bằng cách:

  1. Gỡ cài đặt các phiên bản của ruby ​​từ Macports
  2. Cài đặt Ruby Version Manager, aka RVM, để giúp tôi quản lý nhiều ruby ​​cài đặt. (tùy chọn, nhưng được đề nghị)

Tôi cũng đã đăng nội dung này trên Ruby on Rails Talk. Xem Error: cross-thread violation on rb_gc()

4

Tôi đã gặp sự cố tương tự khi cài đặt buildr đá quý (sử dụng rvm). This giải pháp giúp:

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

Mặc dù, nó không liên quan đến câu hỏi, điều này có thể giúp những người sẽ tìm kiếm được thông báo lỗi tương tự.

+0

Bản sửa lỗi cố định này cho tôi.Cảm ơn – mawaldne

10

Điều này có thể xảy ra với tất cả các loại đá quý và dường như phải làm với một đá quý với phần mở rộng C được biên dịch dựa vào một loại ruby ​​khác so với cái cố gắng tải nó.

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.

Các json đá quý là một thủ phạm thường xuyên, nhưng có một danh sách dài các đá quý khác mà mọi người đã có vấn đề với. Tôi không chắc làm thế nào để tìm ra chính xác đá quý nào gây ra vấn đề, nhưng nếu bạn đang sử dụng rvm với đá quý bạn, luôn có thể rvm gemset empty và cài đặt lại tất cả các đá quý của bạn với Bundler.

+1

Đề nghị tốt - Tôi đã nhét gói cài đặt của tôi và một nửa với một ruby ​​và một nửa với đá quý khác và rvm rỗng là chính xác những gì nó đã làm thẳng những điều trên. –

Các vấn đề liên quan