【问题标题】:Active resource find doesn't work in production活动资​​源查找在生产中不起作用
【发布时间】:2017-10-15 00:38:32
【问题描述】:

正如标题所说,我的应用程序中有一个简单的 ActiveResource,它应该从 api 获取数据。该集合在本地和生产服务器上都可以完美运行。但是,.find 在生产中不起作用,我收到一个奇怪的错误:

MyResource.find(1, params: { website_id: 2 })
ArgumentError: wrong number of arguments (given 2, expected 0..1)

如果我从连接到 api 的本地控制台运行相同的查询。 API 返回有效响应。我不知道如何调试它。

class MyResource < ActiveResource::Base
  self.site = Rails.configuration.content_url
  self.prefix = "/api/websites/:website_id/"
  self.element_name = "game"
end

我不得不说,我在应用程序中有其他资源使用相同的 api,find 方法适用于它们,只有这个有问题。 出于某种原因,它会调用

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L330 有 2 个参数,但我不知道是谁打了这样的电话。而且它只发生在生产模式中,而不是在开发模式中。

【问题讨论】:

  • 看看MyResource的类定义会很有帮助,你能分享一下要点吗

标签: ruby-on-rails api ruby-on-rails-5


【解决方案1】:

我发现了问题,但这是有史以来最奇怪的事情。 在 api 控制器的 show 方法中,我返回了一个对象,但我正在将哈希与一些额外的数据合并。如果我在浏览器中打开,响应很好,开发工作,但由于某种原因,在生产中它不想接受合并。 所以问题解决了,但仍然不知道为什么会这样。

【讨论】:

    【解决方案2】:

    我在一个应用程序中遇到了类似的问题,该应用程序将 ActiveRecord 用于供应商模型,将 ActiveResource 用于具有供应商属性的交付模型。在开发中,如果尚未加载供应商模型,您可以获取交付并反序列化它,包括供应商属性。但是,如果已加载供应商模型,则尝试获取交付会导致此问题中描述的错误。

    如何在控制台中重现:

    Vendor.connection
    Delivery.find(1)
    

    似乎 AResource 正在尝试创建 Vendor 的新实例。

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2013-04-09
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      相关资源
      最近更新 更多