Rails 带有 Grape 的 Web 服务,返回模糊错误
Rails Web Service with Grape, returning vague error
我正在尝试使用 Grape 在 Rails 中创建一个 API 网络服务。我关注了这个 tutorial.
我设法搞定了一切,运行 并希望它能完美运行。然而,当我尝试测试我的 API 端点时,出现了一个模糊的错误。我不知道从哪里开始,因为我不知道如何解释返回的错误。这是:
compared with non class/module
def rescuable?(klass)
options[:rescue_all] || (options[:rescue_handlers] || []).any? { |error, _handler| klass <= error } || (options[:base_only_rescue_handlers] || []).include?(klass)
end
这是我跟踪中的最后 20 个条目:
grape (0.13.0) lib/grape/middleware/error.rb:50:in `<='
grape (0.13.0) lib/grape/middleware/error.rb:50:in `block in rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `any?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:30:in `rescue in call!'
grape (0.13.0) lib/grape/middleware/error.rb:25:in `call!'
grape (0.13.0) lib/grape/middleware/base.rb:18:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
rack (1.6.4) lib/rack/builder.rb:153:in `call'
grape (0.13.0) lib/grape/endpoint.rb:202:in `call!'
grape (0.13.0) lib/grape/endpoint.rb:190:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
grape (0.13.0) lib/grape/api.rb:114:in `call'
grape (0.13.0) lib/grape/api.rb:44:in `call!'
grape (0.13.0) lib/grape/api.rb:39:in `call'
actionpack (4.2.2) lib/action_dispatch/routing/mapper.rb:51:in `serve'
谁能帮我理解这是怎么回事?
在表达式 klass <= error
中,error
不是 class 或模块,因此比较失败。相反,您想检查 error.kind_of? klass
(或者如果您想确保 error
是那个确切的 class 的实例,则可能 error.instance_of? klass
)。参见 更多关于这种区别的信息。
编辑:
如果您逐字按照链接的教程进行操作,则您可能在 grape 中使用了已弃用的方法。根据 the upgrade docs,error_response
(在教程中用于为 ActiveRecord::RecordNotFound
和 ActiveRecord::RecordInvalid
错误生成自定义响应)应该替换为 error!
使用葡萄 >= 0.12.
我正在尝试使用 Grape 在 Rails 中创建一个 API 网络服务。我关注了这个 tutorial.
我设法搞定了一切,运行 并希望它能完美运行。然而,当我尝试测试我的 API 端点时,出现了一个模糊的错误。我不知道从哪里开始,因为我不知道如何解释返回的错误。这是:
compared with non class/module
def rescuable?(klass)
options[:rescue_all] || (options[:rescue_handlers] || []).any? { |error, _handler| klass <= error } || (options[:base_only_rescue_handlers] || []).include?(klass)
end
这是我跟踪中的最后 20 个条目:
grape (0.13.0) lib/grape/middleware/error.rb:50:in `<='
grape (0.13.0) lib/grape/middleware/error.rb:50:in `block in rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `any?'
grape (0.13.0) lib/grape/middleware/error.rb:50:in `rescuable?'
grape (0.13.0) lib/grape/middleware/error.rb:30:in `rescue in call!'
grape (0.13.0) lib/grape/middleware/error.rb:25:in `call!'
grape (0.13.0) lib/grape/middleware/base.rb:18:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
rack (1.6.4) lib/rack/builder.rb:153:in `call'
grape (0.13.0) lib/grape/endpoint.rb:202:in `call!'
grape (0.13.0) lib/grape/endpoint.rb:190:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
grape (0.13.0) lib/grape/api.rb:114:in `call'
grape (0.13.0) lib/grape/api.rb:44:in `call!'
grape (0.13.0) lib/grape/api.rb:39:in `call'
actionpack (4.2.2) lib/action_dispatch/routing/mapper.rb:51:in `serve'
谁能帮我理解这是怎么回事?
在表达式 klass <= error
中,error
不是 class 或模块,因此比较失败。相反,您想检查 error.kind_of? klass
(或者如果您想确保 error
是那个确切的 class 的实例,则可能 error.instance_of? klass
)。参见 更多关于这种区别的信息。
编辑:
如果您逐字按照链接的教程进行操作,则您可能在 grape 中使用了已弃用的方法。根据 the upgrade docs,error_response
(在教程中用于为 ActiveRecord::RecordNotFound
和 ActiveRecord::RecordInvalid
错误生成自定义响应)应该替换为 error!
使用葡萄 >= 0.12.