2

実行に時間がかかるスクリプトがあります。cron ジョブをスケジュールし、バックエンドを使用してジョブを実行します。

cron は次のようになります。
url: /cron/my_job_name
target: mybackend
schedule: every 30 minutes from 06:00 to 12:00

cron ジョブは期待どおりに正しく実行されます。しかし、URL: https://myappname.googleplex.com/cron/my_job_name にアクセスすると、ジョブが 60 秒以上実行されると「DeadlineExceededError」が発生します。

テスト目的で、URL に直接アクセスできるようにする必要があります。テストのために毎回 cron スケジュールを変更したくありません。

URL にアクセスしてバックエンドを実行する方法はありますか?

app.yaml と backends.yaml を追加する

app.yaml
url: /cron/my_job_name
script: path/my_job_name.py
login: admin

バックエンド.yaml
name: mybackend
class: B8
instances: 1
options: dynamic

4

1 に答える 1

1

URL にアクセスしているときに、実際にはそれを処理するためにバックエンド インスタンスを呼び出していないように思えます。

ドキュメントから:

バックエンド インスタンスは、http://[instance].[backend_name].[your_app_id].appspot.com への HTTP リクエスト、またはアプリケーションのカスタム ドメインをターゲットにすることができます。http://[backend_name].[your_app_id].appspot.com を使用してインスタンスをターゲットにせずにバックエンドをターゲットにすると、App Engine はバックエンドの最初に使用可能なインスタンスを選択します。

バックエンド API は、バックエンドまたはインスタンスのアドレスを取得する関数を提供します。これにより、アプリケーション バージョンはリクエストでバックエンドをターゲットにしたり、バックエンドが別のバックエンドをターゲットにしたり、バックエンドの 1 つのインスタンスが別のインスタンスをターゲットにしたりできます。これは、開発環境と本番環境の両方で機能します。

BACKEND_ID および INSTANCE_ID 環境変数には、リクエストを処理するインスタンスのバックエンド名とインスタンス インデックスが含まれます。

URL を変更して (backends.yaml からの) バックエンド名を含めます。他の構成が正しければ、アクセスできるはずです。

同じトピックの詳細:

バックエンドは、app.yaml で定義されたハンドラーをメイン アプリケーション バージョンと共有します。コードやハンドラーの共有を避けたい場合、または単に関連するハンドラーを login: admin でマークする場合は、バックエンドを別のアプリケーション ルート ディレクトリに配置できます。

より詳細な回答が必要な場合は、backends.yaml、app.yaml、およびハンドラーを投稿すると役立つ場合があります。

于 2012-11-01T14:19:24.743 に答える