Rails在Heroku上的web和worker之间共享缓存

时间:2014-06-11 07:15:34

标签: ruby-on-rails caching heroku sidekiq worker

我有一个Rails应用程序,它同时包含Web进程和后台工作程序(运行Sidekiq)。

我有一个功能是从Web进程写入缓存值,然后工作人员稍后从缓存中读取该值。

在网上:

Rails.cache.write 'key', 'xxx'

在工人中:

Rails.cache.read 'key'

这可以在我的本地环境中找到,但是当我将此代码部署到Heroku时,worker无法从缓存中读取相应的键,它总是返回nil。

我想知道生产模式是否有任何特殊配置?

1 个答案:

答案 0 :(得分:3)

Rails中的默认缓存存储是filestore,这意味着缓存存储在磁盘上。

来自Rails guide on caching

  

这是默认的缓存存储实现。

您的工作人员和网络流程共享相同的文件系统,这些dynos是在完全不同的环境中生成的,这些环境不共享资源。

如果您想共享缓存,则需要将其集中存储在可以访问的位置。

这意味着可能意味着数据存储,例如MemcacheRedis

有很多Memcache and Redis addons available on Heroku