レガシ テスト/ユニット (ミニテスト) テストと RSpec の両方を含む Rails 3.2.8 プロジェクトがあります。Jenkins で継続的インテグレーションを実行していますが、しばらくの間、障害に気づいていません。その理由は、何かがテストの失敗時に終了コードをオーバーライドし、失敗したテストまたは仕様があるかどうかに関係なく、終了コード 0 を返しているように見えるためです。
私はいくつか掘り下げましたが、Kernel#at_exit スタックを掘り下げて、どの gem/plugins が proc を登録しているかを確認したいと思います。Cで実装された言語機能であることは知っています。
だから、私はこのヤクを剃る助けを探しています:
- 失敗したテストで終了コード 0 が返されるのはなぜですか?
- 何かが proc/callback を at_exit に追加していると仮定すると、コールバックが何であるかを確認するにはどうすればよいですか?
- 私はそれが C で書かれていることを知っており、ソースを見てきました。ルビーフックは見当たりません。追加できるサードパーティの拡張機能はありますか、またはそこにある程度の可視性を与える Ruby へのパッチを知っている人はいますか?
- dtrace はそこに入って見るために機能しますか?
私がやったことのいくつか:
- gem とインストールされているライブラリを grep しました
at_exit
が、あまり疑わしいものは見つかりませんでした。 - Rails アプリで同じ gemset を使用して、単一の仕様で新しいアプリを作成して実行すると、期待どおりに動作します (テストに合格すると終了コード 0 が返され、失敗すると 1 が返されます)。
- ルビーへの可視性を提供するのに役立つパッチ/拡張機能を見つけようとしました
at_exit
私がまだ行っていないいくつかのこと:
- DTrace を学習しようとしました (私は Mac を使用しています) - 使用方法を示すプレゼンテーションを見たことがありますが、まだ試していません。
- プロジェクトからすべての宝石を削除して、何が原因であるかを確認してください。プロジェクト固有のようです。
事前にご協力いただきありがとうございます。
PS: このプロジェクトの Gemfile の gem は次のとおりです。
gem 'rails', '~> 3.2.8'
gem 'acts-as-taggable-on', '~> 2.3.1'
gem "akamai_api", :path => "vendor/git/akamai_api"
gem 'dalli'
gem "gabba"
gem "googlecharts", :require => "gchart"
gem "hpricot"
gem 'jquery-rails'
gem 'linkscape'
gem "logging", "1.4.3"
gem 'machinist', '>= 2.0.0.beta2'
gem "mysql2"
gem 'newrelic_rpm'
gem "premailer-rails3"
gem 'rack-cache'
gem "rack-ssl-enforcer"
gem 'sendgrid'
gem "tokyocabinet", "1.29"
gem 'twitter-bootstrap-rails', :git => 'git://github.com/seyhunak/twitter-bootstrap-rails.git'
gem "useragent"
gem "yajl-ruby", :require => "yajl"
group :assets do
gem 'coffee-rails'
gem 'sass-rails'
gem 'uglifier'
end
group :no_rake do
gem "vanity"
end
group :development, :test do
gem 'debugger'
gem 'thin'
gem 'rspec-rails'
end
group :test do
gem 'vanity'
gem 'minitest-rails'
gem 'mocha'
end
更新として、テストが適切に失敗するまで、Gemfile でバイナリ ツリー検索を実行しました (半分をオフにして、テストを実行し、残りの半分をオフにして.. を繰り返します)。logging gem が原因で rspec がゼロ以外を返し、googlecharts gem が test/unit を台無しにしていました。現時点では、理由はわかりません。
ライブラリ (またはアプリ内の依存コード) のどの動作がテストに影響を与えているかを確認するために、これ以上掘り下げていません。Kernel#at_exit を使用して簡単な grep を実行しても何も返されず、それぞれのソースをざっと見ても何も表示されませんでした。私は掘り続けますが、それは私がこれまでに見つけたものです.
何が問題なのかまだわからないので、バグレポートは提出していません。