标签: ruby-on-rails caching heroku sidekiq worker
我有一个Rails应用程序,它同时包含Web进程和后台工作程序(运行Sidekiq)。
我有一个功能是从Web进程写入缓存值,然后工作人员稍后从缓存中读取该值。
在网上:
Rails.cache.write 'key', 'xxx'
在工人中:
Rails.cache.read 'key'
这可以在我的本地环境中找到,但是当我将此代码部署到Heroku时,worker无法从缓存中读取相应的键,它总是返回nil。
我想知道生产模式是否有任何特殊配置?
答案 0 :(得分:3)
Rails中的默认缓存存储是filestore,这意味着缓存存储在磁盘上。
filestore
来自Rails guide on caching
这是默认的缓存存储实现。
您的工作人员和网络流程不共享相同的文件系统,这些dynos是在完全不同的环境中生成的,这些环境不共享资源。
如果您想共享缓存,则需要将其集中存储在可以访问的位置。
这意味着可能意味着数据存储,例如Memcache或Redis。
有很多Memcache and Redis addons available on Heroku。