我有一个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插件