【问题标题】:Sidekiq throws 'Active Record Unknown Primary Key Error' on Active Type objectSidekiq 在 Active Type 对象上抛出“Active Record Unknown Primary Key Error”
【发布时间】:2015-08-26 15:06:31
【问题描述】:

我在我的 Rails 应用程序中使用 Sidekiq gem 来异步处理一些长时间运行的进程。如this Railscast 中所示,对要处理的模型的引用作为参数传递给执行后台处理的工作类的perform_async 方法。

如果所讨论的模型是一个 Active Record 对象,这将不是问题。然而,它是一个 Active Type 对象,旨在“像 ActiveRecord 一样嘎嘎作响”,不幸的是它的嘎嘎声并没有那么大声,所以我得到了一个 ActiveRecord::UnknownPrimaryKeyError

如何为实际上不是 db 对象的 Ruby 对象设置主键并说服 Sidekiq 将其视为主键?无法从 Active Type Github 页面收集有关如何执行此操作的信息。

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails ruby rails-activerecord sidekiq


    【解决方案1】:

    这取决于你想用你的活动类型对象做什么。 正如Documentation 所述

    您传递给perform_async 的参数必须由simple JSON 数据类型组成:字符串、整数、浮点数、布尔值、空值、数组和哈希。

    如果您没有标识对象的 id(从您的帖子中我知道您没有),那么最好的解决方案是将对象转换为哈希,然后将其传递给 perform_async 。但正如我所说,这取决于你需要从你的对象中获得什么数据。在某些情况下,您可能不需要使用哈希,而更简单的数据类型就足够了。

    【讨论】:

    • 因此,在没有 id 的情况下,我将 Active Type 对象的标题属性(一个字符串)传递给 perform_async。但是这个问题不是没有id,而是没有主键,比如Active Type Object。我刚刚尝试将 Sidekiq 与实际的 Active Record 对象一起使用,并且效果很好。然后我想知道是否有任何方法可以通过设置 p 键使 Active Type 对象更像 Active Record。谢谢。
    • 我曾尝试在active_type_object.rb 中执行self.primary_key = :title 但没有成功
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多