【问题标题】:Rails controller fails with TypeError - "Error during failsafe response"?Rails 控制器因 TypeError 失败 - “故障安全响应期间出错”?
【发布时间】:2017-12-31 16:51:00
【问题描述】:

我的 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


    【解决方案1】:

    当我读到你的问题时,我无法关闭标签,我花了最后一个小时刷新等待答案,我试图找出这里的问题,这就是我所达到的,我注意到你的ApplicationController 继承自 ActionController:Base,根据此链接中的 Adding new Behaviour,默认情况下支持 ActionController::MimeResponds,我认为这可能会导致问题,所以您认为从 ActionController::API 导入,我没有真正尝试过项目,但我猜,关于您想知道为什么 rails 会针对您的迁移表进行查询,我想您可以找到答案 here,这就是我可以解决您的问题的原因,希望对您有所帮助。

    【讨论】:

    • 天啊。对不起!在下面的答案中查看实际原因。
    【解决方案2】:

    原来问题出在这条线

    token=RegistrationManager.get_instance.get_auth_token(params)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多