Rails関数を遅延ジョブとして実行しています。問題は、私が持っていたセッション情報が遅延ジョブに出くわさないことです (そうなるとは思っていませんでした)。したがって、私のユーザーはログインしており、そのログインにより、ヒットする postgres スキーマがレールに通知されます。
ユーザー「dave」がスキーム1
に割り当てられているとします。彼は、プロセスのIDをパラメーターとして使用して「長いプロセスを実行」を押します(たとえば、:id => 18)。DJ はアクションを取得しますが、nil を返すため、long_process レコード find(18) を見つけることができません。公開テーブルにはレコードがないため、そこには見つかりません。
現在のユーザー トークンを渡そうとしたところ、関数に渡すことができました。しかし、私はそこで多くを行うことはできません。テーブルに対する権限を持つ唯一のユーザーであるため、現在のアクションのローカル スコープのユーザーを切り替えたいと考えています。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) を呼び出すことができません。だから私は途方に暮れています。どのセッションがそのタスクを作成したかを遅延ジョブワーカーに知らせるにはどうすればよいですか?