1

我正在将 rails 功能作为延迟工作运行。问题是我所拥有的会话信息不会出现在延迟的工作中(我没想到会这样)。因此,我的用户已登录,并且该登录告诉 rails 要命中的 postgres 模式。

假设用户“dave”被分配给方案 1。
他以进程的 id 作为参数(比如:id => 18)点击“run long process”。DJ 得到动作,但找不到 long_process 记录 find(18),因为它返回 nil。公共表中没有记录,因此不会在那里找到。

我试图传递我当前的用户令牌,我可以将它传递给函数。但我在那里无能为力。我想为当前操作的本地范围切换用户,因为它是唯一有权访问表的用户。DJ 击中的下一个动作可能不是针对同一个用户,因此它不应该拥有对先前用户表的权限。

编辑...


在上传模块

def self.find_ex(id)
    return ( (id.class == 'String' && id.count('-') > 0) ? 
                          find_by_guid(id) : find(id) );
end

在上传控制器中

 def run_now
    @upload = Upload.find_ex(params[:id]);
    render :json=>@upload.to_hash(), status: 200  
    ew = EDMWorker.new
    ew.runUploadJob(params[:id])
  end

在它自己的文件中

class EDMWorker
    def runUploadJob(id)
       upload = Upload.find_ex(id);
       upload.run_job();
    end 
    handle_asynchronously :runUploadJob, :priority => 10, :queue => 'public'  
end

延迟作业表中的错误报告顶部

Couldn't find Upload with id=68


第一点起作用。找到并完美呈现对象。
数据在“1”.uploads 中。
延迟作业“动作”中的调用(我怀疑)是针对“public”.uploads 调用的,它应该始终为空。
我无法在延迟作业类中调用 sign_in(user),因为该函数未定义。所以我很茫然。如何让延迟的工作人员知道哪个会话创建了它的任务?

4

0 回答 0