2017-12-31 368 views
1

突然私のレールapiアプリケーションで奇妙な問題を抱えています。RailsコントローラがTypeErrorで失敗する - 「フェイルセーフ応答中のエラー」?

クライアントが「get_auth_token」メソッドの1つを呼び出すと、次のエラーが発生します。エラーは、基本のapplication_controlerクラスをロードしようとすると発生します(エラーは1行目に発生します)。

この時点で、なぜアプリが「schema_migrations」に対して選択を実行しているのか、私には謎です。ここで

Started POST "/register/get_auth_token" for 127.0.0.1 at 2017-12-31 11:56:17 -0800 
(1.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC 

TypeError (wrong argument type Class (expected Module)): 

app/controllers/application_controller.rb:1:in `<top (required)>' 
app/controllers/registration_controller.rb:1:in `<top (required)>' 
Error during failsafe response: wrong argument type Class (expected Module) 


/Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:181:in `include' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:181:in `block in add_template_helper' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:181:in `module_eval' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:181:in `add_template_helper' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:110:in `block in helper' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:109:in `each' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/abstract_controller/helpers.rb:109:in `helper' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.3/lib/action_controller/railties/helpers.rb:17:in `inherited' 
    /Users/jkramer/RubymineProjects/CrowdWisdomServer/app/controllers/application_controller.rb:1:in `<top (required)>' 
    /Users/jkramer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:476:in `load' 
... 

は、アプリケーションのコントローラ

class ApplicationController < ActionController::Base 
    include ActionController::MimeResponds 
    protect_from_forgery with: :null_session 
end 

と呼ばれている実際のコントローラです:

class RegistrationController < ApplicationController 
    def get_auth_token 
    token = RegistrationManager.get_instance.get_auth_token(params) 
    if token.nil? 
     render json: {status: "authentication_failed"} 
     return 
    end 
    render json: {status: :ok, auth_token: token} 
    end 
end 

答えて

0

それが問題だったことが判明し、私はヘルパーサブディレクトリに持っていたヘルパークラスと呼ばれるRegistrationManagerを指しライン

token=RegistrationManager.get_instance.get_auth_token(params) 

います。あなたがヘルパーディレクトリに存在するモジュールではなくクラスを参照する場合、私はまだ理解していませんが、Railsは不幸です。なぜそれが1行目で失敗するのか分かりませんが、クラスをヘルパーからコントローラ/関心事に移動させることで問題は解決しました。エラーメッセージが1行目ではなく悪い呼び出しの場所を参照してくれたら、私とアデル氏に多くの時間を節約できたと思います!

0

は私がタブを閉じることができなかったあなたの質問を読んでた瞬間、私は最後を過ごしました時間を爽やかに待って答えを待っていましたが、ここで何が問題なのか把握しようとしましたが、あなたが到達したことがわかりました。あなたはApplicationControllerActionController:BaseこのリンクのAdding new Behaviourによると、ActionController::MimeRespondsがデフォルトで問題を引き起こすと思われますので、代わりにActionController::APIからのインポートを考えると、実際のプロジェクトでこれを試しませんでしたが、私は推測しています。あなたのマイグレーションテーブルに対するクエリ、私はあなたが答えがhereを見つけることができると思います、これはあなたの問題について私が知ることができたものです。

+0

Jeez。ごめんなさい!以下の答えで実際の原因を参照してください。 – user1023110

関連する問題