6

これは本当に奇妙です。この Rails 3.2.11 アプリでは問題なく動作していました。以前に rspec を実行していたので、新しいブランチを作成し、ファイルを変更し、コミットし、rspec spec/ を実行したときに、大量のセグメンテーション エラーとスタック トレースがほぼ同じ時間発生しました。私が見たように。

rvm を更新し、以前のバージョンの ruby​​ 1.9.3 をインストールしようとしました。私は手付かずの宝石セットにハングアップし続け、再起動することで救済されました. OS X 10.8.3 の再起動後、ruby 1.9.3-p429 をきれいにインストールできました。しかし、rspec は依然として有効です。完全なスタック トレースはhttps://gist.github.com/sam452/5808849です。gem が一掃されたので、gem をバンドルしてインストールしました。また、rspec ジェネレーターを再度実行しようとしましたが、サポート ファイルが 1 つだけ上書きされたようです。レール、レーキ、キュウリは問題なく動くようです。Rake は rspec コマンドに到達すると失敗します。

スタックトレースから関連する部分と思われるものを引っ張ろうとしました:

    Happenstance:tickat sam$ rspec spec/
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/better_errors-0.8.0/lib/better_errors/core_ext/exception.rb:9: [BUG] Segmentation fault
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-darwin12.3.0]

制御フレーム情報

c:0064 p:---- s:0204 b:0204 l:000203 d:000203 CFUNC  :callers
c:0063 p:0064 s:0201 b:0201 l:000290 d:0026c0 LAMBDA /Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/better_errors-0.8.0/lib/better_errors/core_ext/exception.rb:9
c:0062 p:---- s:0198 b:0198 l:000197 d:000197 FINISH

Ruby レベルのバックトレース情報

/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:17:in `block in autorun'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:80:in `run'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:22:in `run'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load_spec_files'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `each'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `block in load_spec_files'
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load'
/Users/sam/apps/tickat/spec/controllers/admin/events_controller_spec.rb:1:in `<top (required)>'

C レベルのバックトレース情報

   See Crash Report log file under ~/Library/Logs/CrashReporter or
   /Library/Logs/CrashReporter, for the more detail of.

その他のランタイム情報

* Loaded script: /Users/sam/.rvm/gems/ruby-1.9.3-p429/bin/rspec
* Loaded features:
    0 enumerator.so
    1 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/x86_64-darwin12.3.0/enc/encdb.bundle
    2 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/x86_64-darwin12.3.0/enc/trans/transdb.bundle
    3 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/defaults.rb

2030年ラインまでずっと。

4

3 に答える 3

20

Rspeclet!は、変数を再帰的に定義する場合など、場合によってはセグメンテーション違反を引き起こします。これによりvm_call_cfunc - cfp consistency error、RSpec コア、Ruby クラッシュ レポート、およびSegmentation fault: 11

let!(:some_var) { "Some value" }

describe '.method' do
  ...
  let!(:some_var) { create(:model, some_var: some_var) }
end
于 2015-07-15T14:50:51.570 に答える
4

Gemfile のテスト グループから削除better_errorsしてください。これがエラーの原因です。binding_of_callerセグメンテーション違反を報告している行を見ると、次better_errorsのように報告されています。

.../better_errors/core_ext/exception.rb:9: [BUG] Segmentation fault 

したがって、Gemfile は次のようになります。

group :development do
  gem 'better_errors'
  gem 'binding_of_caller'
end

# for testing to work with rspec
group :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'ffaker'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'launchy'
end
于 2013-09-16T15:14:32.913 に答える
0

なぜ rspec が 'detached HEAD' 状態で動作するのかはまだわかりませんが、コミット中はそうではありませんが、私が嫌いな gem uninstall better_errors になってしまいました。スタックトレースの最初の数行では、何らかの理由で Ruby と better_errors と競合しているように見えます。レポートを提出します。助けてくれてありがとう。

于 2013-06-21T22:23:23.587 に答える