2017-09-28 3 views
2

私はRailsプロジェクトを持っており、テストのためにRSpecを使用しています。最近、私は私のspec_helper.rbでこれを追加しました:私はbundle exec rspecとローカルでのテストを実行した場合TypeError:クラスのスーパークラスの不一致タスク

config.before(:suite) do 
    Rails.application.load_tasks 
end 

、すべてが正常です。私は、コマンドがクラッシュし、トラビスCIで同じことをしようとするとしかし:

TypeError: superclass mismatch for class Task 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:9:in `<module:Rails>' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:8:in `<module:Sprockets>' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:7:in `<top (required)>' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/railtie.rb:163:in `block in <class:Railtie>' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:237:in `instance_exec' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:237:in `block in run_tasks_blocks' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:245:in `each' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:245:in `each_registered_block' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:237:in `run_tasks_blocks' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/application.rb:451:in `block in run_tasks_blocks' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/engine/railties.rb:13:in `each' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/engine/railties.rb:13:in `each' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/application.rb:451:in `run_tasks_blocks' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/engine.rb:453:in `load_tasks' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:194:in `public_send' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/railtie.rb:194:in `method_missing' 
    from (irb):25 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/commands/console.rb:110:in `start' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/commands/console.rb:9:in `start' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/commands/commands_tasks.rb:68:in `console' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
    from /home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/railties-4.2.9/lib/rails/commands.rb:17:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

私はトラヴィスが構築し、手動でbundle exec rails cを開始し、Rails.application.load_tasksを行うデバッグする場合にも、同じことが起こります。

ここで何が問題になる可能性がありますか?どんな手がかりも高く評価されます!

答えて

1

TypeError: superclass mismatchクラスを再度開くと、そのクラスのスーパークラスを再定義しようとします。これは、このエラーを強制する方法です:

class A; end 
class B < A; end 
class C; end 
class B < C; end # raises erorr 

これが唯一のトラヴィス環境で発生するので、可能な場合、私はすぐそこにそれをデバッグしたい:

  • オープン/home/travis/build/my_application/vendor/bundle/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb vimのナノまたは類似のCLIエディタで
  • は、あなたのテストコード
  • を再実行し、エラー
  • bundle install
  • の原因となる線の上、require 'pry'; binding.pryを置きます
  • デバッガを起動し、Taskがどこにあるのかを調べます。 TypeError: superclass mismatchを取得しているので、この行を再オープンする前にTaskを定義しておく必要があります。 show-source Taskには、定義された場所が表示されます。
+0

これは本当に役に立ちました!問題をいくつかの動作にパッチを当てていたイニシャライザに追跡するように管理しました。どうもありがとう! – linkyndy

+0

喜んで:) – nicooga