Rails控制器因TypeError失败 - “故障安全响应期间出错”?

问题描述 投票:1回答:2

我的rails api应用程序突然出现了一个奇怪的问题。

当客户端调用我的“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
ruby-on-rails ruby-on-rails-5
2个回答
0
投票

当我读到你的问题时,我无法关闭标签,我花了最后一小时刷新等待答案,我试图弄清楚这里有什么问题,这里是我已达到的,我注意到你的ApplicationController继承自ActionController:Base根据Adding new Behaviour在此链接默认支持ActionController::MimeResponds,我认为可能会导致问题,所以你认为从ActionController::API导入,我没有尝试在一个真正的项目,但我猜,关于你的奇迹为什么rails点击你的迁移表查询,我想你可以找到答案here,这是我可以想出你的问题,希望这有帮助。


0
投票

事实证明,问题在于线

token=RegistrationManager.get_instance.get_auth_token(params)

它指的是我在helpers子目录中有一个名为RegistrationManager的辅助类。由于我仍然不明白的原因,如果你引用一个类而不是生成在helpers目录中的模块,Rails会不高兴。为什么它在第1行失败,我不太确定,但将帮助者的类转移到控制器/关注点解决了问题。我希望错误消息提到错误调用的位置,而不是第1行,可以节省我和Adel先生很多时间!

© www.soinside.com 2019 - 2024. All rights reserved.