6

私が取り組んでいるコードベースは最近、Ruby1.9.2からRuby1.9.3に、そしてRails3.1からRails3.2.2にアップグレードされました。私はRVMを使用しているのでrvm install 1.9.3、必要なのはそれだけだと思っていただけです。

私が走るとき

rails s

エラーが発生します

[バグ]クロススレッド違反rb_gc()

この問題に関連するリンクをいくつか見つけました。StackOverflowに1つありますが、実際には答えが得られません。最も有望な答えはRVMサイトにあります

これまで私が見たすべてのケースで、C拡張機能を備えたruby gem / libraryは、ロードしようとしているものとは異なるrubyやアーキテクチャに対してコンパイルされたという結果になりました。アプリケーションがこのバグガーを追い詰めるために使用するC拡張機能を備えたgemをアンインストールして再インストールしてみてください。

これはかなり役に立ちますが、私のRuby-fuは、どのgemにC拡張機能があり、どのgemを再インストールする必要があるかを知るのに十分な強度がありません。このトピックに関する他のリンクのかなりの数が、json gemに問題があることを示唆しているように思われるので、提案された解決策に従ってみました。

gem uninstall json 
gem install --platform=ruby

これは私にとって実際には何も変わりませんでした。Rails環境を起動しようとすると、まったく同じエラーが発生します。

この問題を追跡するにはどうすればよいですか?

それが役立つ場合は、gemリストからの出力を次に示します。

actionmailer (3.2.2)
actionpack (3.2.2)
activemodel (3.2.2)
activerecord (3.2.2)
activeresource (3.2.2)
activesupport (3.2.2)
addressable (2.2.7)
akami (1.0.0)
arel (3.0.2)
bcrypt-ruby (3.0.1)
bson (1.6.1)
bson_ext (1.6.1)
builder (3.0.0)
bundler (1.1.3, 1.0.21)
capybara (1.1.2)
carmen (0.2.13)
childprocess (0.3.1)
ci_reporter (1.7.0)
coderay (1.0.5)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
commonjs (0.2.5)
cucumber (1.1.9)
cucumber-rails (1.3.0)
database_cleaner (0.7.2)
devise (2.0.4)
diff-lcs (1.1.3)
ejs (1.0.0)
email_spec (1.2.1)
engineyard (1.4.28)
engineyard-serverside-adapter (1.6.3)
erubis (2.7.0)
escape (0.0.4)
execjs (1.3.0)
factory_girl (3.0.0)
factory_girl_rails (3.0.0)
faker (1.0.1)
fakeweb (1.3.0)
ffi (1.0.11)
gherkin (2.9.3)
gyoku (0.4.4)
haml (3.1.4)
haml-rails (0.3.4)
hash-deep-merge (0.1.1)
highline (1.6.11)
hike (1.2.1)
httpi (0.9.6)
i18n (0.6.0)
jasmine (1.1.2)
jasmine-core (1.1.0)
jasminerice (0.0.8)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.6.6)
json_pure (1.6.6)
kaminari (0.13.0)
kgio (2.7.4)
launchy (2.0.5)
less (2.1.0)
less-rails (2.2.0)
libv8 (3.3.10.4 x86_64-darwin-11)
log4r (1.1.10)
mail (2.4.4)
metaclass (0.0.1)
method_source (0.7.1)
mime-types (1.18)
mocha (0.10.5)
mongo (1.6.1)
mongoid (2.4.7)
mongoid-rspec (1.4.4)
multi_json (1.2.0)
net-ssh (2.2.2)
newrelic_rpm (3.3.3)
nokogiri (1.5.2)
nori (1.1.0)
open4 (1.3.0)
orm_adapter (0.0.7)
polyglot (0.3.3)
pr_geohash (1.0.0)
pry (0.9.8.4)
pry-highlight (0.0.1)
pry_debug (0.0.1)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.2)
rails-footnotes (3.7.6)
railties (3.2.2)
raindrops (0.8.0)
rake (0.9.2.2)
rdoc (3.12)
recursive-open-struct (0.2.1)
rest-client (1.6.7)
rpm_contrib (2.1.8)
rsolr (1.0.7)
rspec (2.9.0)
rspec-core (2.9.0)
rspec-expectations (2.9.0)
rspec-mocks (2.9.0)
rspec-rails (2.9.0)
rubyzip (0.9.6.1)
sass (3.1.15)
sass-rails (3.2.5)
savon (0.9.9)
selenium-webdriver (2.20.0)
settings-tree (0.2.1)
simplecov (0.6.1)
simplecov-html (0.5.3)
simplecov-rcov (0.2.3)
slop (2.4.4)
spine-rails (0.1.0)
spork (1.0.0rc2)
sprockets (2.1.2)
sunspot (1.3.1)
sunspot_mongoid (0.4.1)
sunspot_rails (1.3.1)
sunspot_solr (1.3.1)
term-ansicolor (1.0.7)
therubyracer (0.10.1)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
twitter-bootstrap-rails (2.0.6)
tzinfo (0.3.32)
uglifier (1.2.4)
unicorn (4.2.1)
warden (1.1.1)
wasabi (2.1.0)
xpath (0.1.4)
4

5 に答える 5

6

ここにあなたが試すことができる様々なアプローチがあります。

掃除

古いバージョンのgemをクリーンアップするには:

gem cleanup --dryrun

json

json gemが問題であるかどうかを一時的に確認するには、json(ネイティブ)からjson(純粋なルビー)に切り替えて、Gemfileを変更します。

gem install json_pure 

ネイティブの宝石

あなたの宝石リストには、ネイティブとして私のために飛び出すいくつかがあります:

  • bcrypt
  • bson
  • エルビス
  • ffi(多くのネイティブ接続を有効にします)
  • ガーキン
  • kgio
  • 以下
  • のこぎり
  • 雨滴
  • therubyracer(多くの予測できない問題IMHO)
  • ユニコーン

ffi

あなたの宝石ffiは特に興味深いです-あなたはそれで何をしているのか知っていますか?

これffiにより、Rubyコードがネイティブコードを呼び出すことができるようになります。たとえば、Rubyアプリの一部をネイティブライブラリに接続する必要がある場合などです。

あなたがあなたの問題を診断しているとき、私は最初にこの宝石を見るでしょう。

makefiles

Makefileファイルを含むgemを見つけるには、これはネイティブコードを持っていることを示す良い指標です。

find / | grep "/ruby/gems/" | grep Makefile

すべての宝石を見つけて削除できるようにするには:

find / | grep "/ruby/gems/"

核RVM

RVMまたはその部分を削除するには、、、またはこのスクリプトを使用してrvm uninstallrvm implodeRVMを削除し、残っている部分を見つけます。

https://raw.github.com/SixArm/sixarm_unix_shell_scripts/master/rvm-uninstall-danger

rbenv+bundlerを試してください

rvmの使用からrbenv+bundlerの使用に変更しましたが、うまく機能しています。

rbenvツールは、Rubyバージョンを管理するためのrvmの直接の競合相手です: https ://github.com/sstephenson/rbenv

Bundlerは、gemsetとgemの依存関係を管理するための優れた方法です:http: //gembundler.com/

醸造

Macを使用していてMacPortsを使用している場合、Homebrewに変更するには:

リンク

于 2012-04-22T04:09:32.277 に答える
4
  1. 次のコマンドを実行して、jsongemのすべてのバージョンをアンインストールします。 gem uninstall json

  2. 次に、以下を実行します。 gem install json --platform=ruby

  3. バンドルを再度実行します。bundle install

于 2013-04-03T14:40:12.893 に答える
1

すべてのgemを削除して、コマンドを使用してアプリに再インストールする必要がありますbundle

このエラーのRVMドキュメントを引用します。

アプリケーションがこのバグガーを追い詰めるために使用するC拡張機能を備えたgemをアンインストールして再インストールしてみてください。

RVMでgemを削除するコマンドは次のとおりです。

rvm uninstall
于 2012-04-19T00:49:11.750 に答える
0

最新のRVMをクリーンに再インストールするのが最良のオプションです。

rvm implode

rm -rf ~/.rvm

curl -L get.rvm.io | bash -s stable

于 2012-04-24T03:09:48.287 に答える
0

クリーンなruby/rvmインストールルートを実行する前に、ruby 1.8.7(ほとんどのディストリビューションにデフォルトでインストールされている)を削除したかどうかを確認する必要があります。これは、1.9.2でコンパイルされた私の宝石のいくつかを妨害していたと思います(それはネイティブのものの1つだったと思います)。apt-getを使用して1.8.7を完全に削除してから、新しいrvmプロファイルを作成し(.rvmrcのプロファイル名を変更して)、bundle installを実行して、すべてのgemを完全に更新しました。

于 2012-04-24T13:39:22.930 に答える