1

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) を呼び出すことができません。だから私は途方に暮れています。どのセッションがそのタスクを作成したかを遅延ジョブワーカーに知らせるにはどうすればよいですか?

4

0 に答える 0