如何从Resque worker中检索正确的Rails单例实例

时间:2014-05-16 15:35:26

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

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

Synchronizer.instance

由于某些原因,我的项目中没有任何数据库服务,除了Resis发挥其神奇作用的Redis实例。

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

Synchronizer.instance.asset(id)

因为worker位于不同的线程中,所以我检索的Synchronizer实例与Rails环境的实例不同。

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

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

1 个答案:

答案 0 :(得分:0)

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