【问题标题】:How to retrieve correct Rails singleton instance from Resque workers如何从 Resque 工作人员中检索正确的 Rails 单例实例
【发布时间】:2014-07-05 03:26:12
【问题描述】:

我的 Rails 应用程序中有一个单例商店,其中包含一些资产。可以这样访问:

Synchronizer.instance

由于某些原因,我的项目中没有任何数据库服务,除了 Resque 发挥其魔力的 Redis 实例。

我想像这样从 Resque 工作人员那里访问资产:

Synchronizer.instance.asset(id)

因为工作线程在不同的线程中,我检索到的 Synchronizer 实例与 Rails 环境的实例不同。

Rails: Synchronizer:0x007feb5c389a10 Resque: Synchronizer:0x00000008566f00

首先它会扼杀使用 Singleton 的兴趣。我可以将有关资产的信息作为哈希传递给工作人员,但是还有其他方法可以访问正确的单例实例吗?

【问题讨论】:

  • 您不能从另一个进程访问对象。将资产信息存储在 Redis 中是一种选择。

标签: ruby-on-rails ruby multithreading singleton resque


【解决方案1】:

正如 Stefan 评论的那样,不可能从另一个进程访问 ruby​​ 对象,并且无论如何使用单例来保存资产是个坏主意。我了解到您应该尽可能始终避免单身。我终于将资源缓存在 Redis 中,并在需要时检索它们。

【讨论】:

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