我正在将 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),因为该函数未定义。所以我很茫然。如何让延迟的工作人员知道哪个会话创建了它的任务?