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



我有一个Rails应用程序,它有web进程和后台worker(运行Sidekiq)。

我有一个功能,从web进程写入值到缓存,然后工作线程从缓存中读取这个值。

在web:

Rails.cache.write 'key', 'xxx'
在工人

:

Rails.cache.read 'key'

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

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

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

来自Rails缓存指南

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

你的工作进程和web进程不共享相同的文件系统,动态进程是在完全不同的环境中生成的,它们不共享资源。

如果你想共享缓存,你需要把它集中存储在一个他们都可以访问的地方。

这意味着可能意味着一个数据存储,如Memcache或Redis。

Heroku有很多Memcache和Redis插件

最新更新