From: "hsbt (Hiroshi SHIBATA)" Date: 2013-01-04T21:26:51+09:00 Subject: [ruby-dev:46832] [ruby-trunk - Bug #7638] trunk で rails の activesupport のテストが失敗してしまう Issue #7638 has been updated by hsbt (Hiroshi SHIBATA). nagachika さん、丁寧な解説ありがとうございます。 #7564 の流れをみると respond_to_missing? を使って method_missing に反応すべきでないものは除外した方が良いということなので、その方向で考えてみます。 ---------------------------------------- Bug #7638: trunk で rails の activesupport のテストが失敗してしまう https://bugs.ruby-lang.org/issues/7638#change-35206 Author: hsbt (Hiroshi SHIBATA) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-12-29 trunk 38656) [x86_64-darwin12.2.1] Ruby のバグとは言い切れませんが、ある時期から activesupport のテストが落ちるようになってしまいました。 Ruby と Rails のどちらを直すべきか判断できないので、何か教えて頂けると助かります。 落ちてしまうテストは https://github.com/rails/rails/blob/master/activesupport/test/core_ext/marshal_test.rb です。テストの実行方法は以下の通りです。 % git clone git://github.com/rails/rails.git % cd rails % gem install bundler --pre % bundle % cd activesupport % bundle exec ruby -Itest:lib test/core_ext/marshal_test.rb テストを実行すると Thread の deadlock が発生しますが、Thread.abort_on_exception = true で実行すると https://github.com/rails/rails/blob/master/activesupport/lib/active_support/testing/isolation.rb#L31 の method_missing 部分で marshal_load が @calls に追加され、この @calls が L26 で send されて NoMethodError で落ちていることがわかりました。 いつから落ち始めたかを調べたところ、 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38175 の変更によって、_dump が @calls に追加されるようになり、rails のテストが落ちはじめ http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38568 の変更で _dump ではなく marshal_load が @calls に追加されるようになって今も落ち続けているという状態です。 Rails のコードに marshal_load と marshal_dump を定義すればテストは落ちなくなるのですが、38175 より前では 発生していなかった現象が発生するようになった原因など教えて頂けないでしょうか。 -- http://bugs.ruby-lang.org/