問題タブ [rq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python フラスコ アプリ コンテキストを rq ジョブに渡す適切な方法
効果的にニュース検索アプリであるフラスコ アプリを作成しました。現在、多くのルートを提供し、ドキュメントの検索とインデックス作成のために Elasticsearch と統合し、Flask-SQLAlchemy を介して mySQL DB と統合しています。
アプリは、ログインしたユーザーがドキュメント/記事を検索できるようにする必要があります。その時点で、elasticsearch がトリガーされ、結果がユーザーに返されます。これはすべて機能します。
現在、RQ と Ajax を使用してバックグラウンドで非同期検索を開始する機能を構築しています。ここで、検索 (いくつかの API の呼び出し)、DB の更新、および ES インデックスの更新を行うタスクをキューに入れるために、RQ が必要です。この機能はすべて、私の Flask アプリ (検索 API 呼び出し、構成、DB ORM、ES インターフェイス) 内で既に構築されているため、理想的にはそれらすべてを再利用したいと考えています。
既存の DB/ES セットアップを再利用できるように、新しいアプリケーション インスタンスを作成しようとするモジュールを呼び出す RQ セットアップがありますが、コードが呼び出されると RQ からエラーが発生します。
アプリケーションの構造は次のとおりです。
私のviews.pyファイルでは、次の行でタスクをキューに入れようとしています:
これにより、フラスコ側で問題は発生しませんが、RQ ワーカーで前述のエラーがスローされます
news_functions.py ファイルで、エラーをスローしているように見える次のインポートとセットアップでモデルなどを再利用できるように、アプリのインスタンスを作成しようとしました:
問題は、アプリ フォルダー自体から create_app をインポートしようとしていることにあると思いますが、他のオプションが何であるかわかりません。フォルダーを上に移動すると、アプリの範囲外であるため、RQ ジョブはタスクをキューに入れることができません。
これに正しい方法でアプローチしているかどうかはわかりませんが、アプリケーション構成、flask-sqlalchemy、es セットアップを効果的に再利用して、この追加タスクをバックグラウンドで実行できるようにしたいと考えています。
うまくいけば、意味があり、誰かが助けることができます!
python - Redis Queue を使用した環境変数の設定
私は RQ が初めてで、フラスコ アプリ内に実装しようとしています。私のルートの 1 つの主な目標は、データベースから値を更新することです。ワーカーをセットアップするには、次を使用しています。
次に、更新ルートは更新ジョブをキューに入れます
最後に、ワーカーは更新関数を実行します
update_task 関数を次のような単純なものに切り替えると、ワーカーのセットアップが (ほぼ) 機能することがわかります。
できます。ただし、実際の関数では、環境変数が定義されていないという問題に遭遇し続けます。これは、実際の更新を実行すると、変数が None または同様のものであるという例外が発生するためです。
RQ内で環境変数を処理する方法を知っている人はいますか? 構成ファイルのような場所で再度宣言する必要がありますか?