2017-12-31 98 views
1

갑자기 내 레일 api 응용 프로그램에 이상한 문제가 있습니다.레일즈 컨트롤러가 TypeError와 함께 실패합니다 - "오류가 발생했을 때 오류가 발생했습니다"?

클라이언트가 "get_auth_token"메소드 중 하나를 호출 할 때 다음과 같은 오류가 발생합니다. 이 오류는 기본 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) 

그. 나는 아직도 이해가 안되는 이유 때문에 헬퍼 디렉토리에있는 모듈이 아니라 클래스를 참조하면 레일스는 불만이다. 1 행에서 실패하는 이유는 확실하지 않지만 헬퍼에서 클래스를 컨트롤러/관심사로 옮기면 문제가 해결됩니다. 오류 메시지가 1 호선이 아니라 나쁜 전화의 위치를 ​​언급했으면 좋겠어. 나와 아델이 많은 시간을 절약 할 수 있었으면 좋겠다.

0

내가 탭을 닫을 수 없습니다 질문을 읽은 순간, 나는 마지막을 보냈다 시간이 상쾌한 응답을 기다리고, 내가 여기 도달 한 문제가 무엇인지 알아 내려고 시도했다. 나는 당신의 ApplicationControllerActionController:Base에서 상속 받았다는 것을 알아 차렸다. 이 링크에 Adding new Behaviour에 따라 hich는 기본적으로 ActionController::API에서 가져 오기를 생각하므로 실제로 프로젝트에서이 작업을 시도하지는 않았지만 추측하고 있습니다. 왜 레일이 맞았는지 궁금한가요? 귀하의 마이 그 레이션 테이블에 대한 쿼리, 나는 당신이 대답 here을 찾을 수있을 것 같아요, 이것은 내가 당신의 문제에 대해 알아낼 수있다, 희망이 도움이됩니다.

+0

Jeez. 죄송합니다. 아래의 답변에서 실제 원인을보십시오. – user1023110

관련 문제