将数据从sidekiq发送到rails控制器而不保存在数据库中

时间:2015-11-09 00:37:40

标签: ruby-on-rails ruby sidekiq

some_controller some_action包括。{ 在动作中,我将一些数据传递给sidekiq作业:

DoSomething.perform_async("some data")

如何在不保存数据库的情况下将DoSomething.perform_async的结果返回给控制器?

sidekiq作业中的简单Rails.cache.write('result')Rails.cache.read('result')中的some_action不起作用。

1 个答案:

答案 0 :(得分:2)

Sidekiq和rails在单独的processes中运行,因此无法共享内存。如果你不能共享内存,你还有其他选择:

  1. 的文件系统
  2. 对象存储服务(例如S3
  3. 数据库(例如redis)
  4. signals
  5. 数据库是最常见的选择,但文件系统或对象存储更适合于许多任务,如图像处理。信号功能有限,我只在此列出完整性。

      

    sidekiq作业中的简单Rails.cache.write('result')和some_action中的Rails.cache.read('result')不起作用。

    也许你正在使用ActiveSupport::Cache::MemoryStore,它不能跨进程工作,因为进程不共享内存。还有其他缓存存储,但在切换之前要注意权衡。