問題タブ [gae-module]
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.
google-app-engine - App Engine フロントエンド バージョンをモジュールに変換する
モジュールが導入される前にモジュールを実装するために、App Engine (Java) のフロントエンドの「バージョン」の概念を少し「悪用」しました。バージョンの概念 (より一般的には番号: 1-dot-myapp など)。
具体的には、すべてのバージョンのコードは同一ですが、実際にはそれぞれ異なる目的で使用されます。この分離により、さまざまなクライアントがさまざまな API バージョン、個別のデプロイ スケジュール、ステージング バージョン、ログの分離などを使用できるようになります。
私の質問は、これらの条件下で、アプリケーションを「実際の」モジュールに変換する最良の方法は何ですか? 「module1」が実際のモジュールであるように (同じ URL - module1-dot-appspot.com にまだマップされています)?
python - 標準ランタイム (python27) を使用する Google App Engine マネージド VM の Dockerfile を検索/変更できない
標準ランタイム (python27) を使用する Google App Engine マネージド VM の Dockerfile を変更したいと考えています。
HTTP 要求を実装するために呼び出す必要がある C++ ライブラリを追加するために、これを実行したいと考えています。このライブラリは、サンドボックス化された python27 ランタイムに必要な唯一の追加機能です。
ドキュメントは、これが可能であることを非常に明確にしています:
各標準ランタイムは、SDK によって提供されるデフォルトの Dockerfile を使用します。このファイルに新しい docker コマンドを追加することで、標準ランタイムを拡張および強化できます。
他の場所では、標準ランタイムのDockerfileがプロジェクト ディレクトリに生成されると述べています。
gcloud を使用して、標準ランタイム (この場合は Python27) に基づくマネージド VM アプリケーションを実行またはデプロイすると、SDK は標準ランタイムをベース イメージとして使用して最小限の Dockerfile を作成します。この Dockerfile はプロジェクト ディレクトリにあります...
これは、同じページに従って変更することになっているものです。
このチュートリアルの後半のステップでは、Dockerfile に命令を追加してランタイム環境の機能を拡張する方法を示します。
問題は、開発サーバーでアプリケーションを実行すると、Dockerfile がどこにも見つからないため、変更を加えることができないことです。
Google App Engine の標準ランタイム Dockerfile を変更できた人はいますか? どんな助けでも大歓迎です。
python - Google App Engine カスタム マネージド VM を実行できません: --custom-entrypoint must be set エラー
問題の説明
Google が提供する標準の python27 マネージド VM と同じように動作する、Google App Engine 用のカスタム マネージド VM を作成しようとしています。(これは、C++ ライブラリをランタイムに追加するための最初のステップとして行っています)。
Googleドキュメントから、次の Dockerfile は標準の python27 ランタイムを指定します。
gcloud preview app run
標準の python27 ランタイムを使用して生成された Dockerfile を調べて、これが正しい Dockerfile であることを確認しました。これと同じです。
しかし、この Dockerfile を使用してdev_appserver.py
、または使用してアプリケーションを実行するgcloud preview app run
と、次のエラーが表示されます。
最新バージョンの gcloud (1.9.86、app-engine-python コンポーネント バージョン 1.9.28) とスタンドアロン python アプリ エンジン SDK (1.9.28) を使用しています。以前のバージョンでも同じ問題が発生したため、最新のバージョンに更新しました。
私が試したこと:
gcloud preview app run --help
について次のように述べています--custom-entrypoint
。
これについてどうすればよいかわかりません。docker イメージに ENTRYPOINT が含まれていてはいけませんか? 追加で提供する必要があるのはなぜですか? また、画像のエントリポイントは何にする必要がありgcr.io/google_appengine/python-compat
ますか? Google はこれに関するドキュメントを提供していません。
エラーを無音にする意味のない を試しました--custom-entrypoint="echo"
が、アプリケーションは HTTP 要求に応答しません。
私が見つけた他の2つの関連するstackoverflowの質問は役に立ちませんでした。受け入れられた回答は、これが解決された SDK のバグであることを示唆しているようです。しかし、最新のものを含む 2 つのバージョンの SDK で試しましたが、まだ問題があります。
- 「<code>The --custom_entrypoint flag must be set for custom runtimes」を修正する方法は?
- Google マネージド VM エラー - カスタム エントリ ポイント
再現手順:
私の問題を強調するために、エラーを生成する簡単なアプリケーションを作成しました。次の 3 つのファイルだけで構成されます。
app.yaml
:
Dockerfile
:
これDockerfile
は、python27 ランタイムに使用されるものと同じです (実際には、python27 ランタイムを使用するときに生成された Dockerfile から文字通りコピーアンドペーストされgcloud preview app run
ます) runtime: python27
。
wsgi.py
:
ただし、これら 3 つのファイルを含むディレクトリで実行するdev_appserver.py app.yaml
と、次のエラーが発生します。
google-app-engine - Google App Engine の部分的なアップグレード
PHP で記述された複雑な appengine サービスがあり、部分的に Python に移行したいと考えています。
私のサービスには と の 2 つの部分があるとしましょ/signIn/....
う/data/...
。/signIn/
最初に一部を移行してから/data/
後で移行したいだけです。
ただし、私のサービスは大きいので/signIn/
、Python で新しい部分を作成し、 Traffic Splittingを使用してこの部分の A/B テストを行いたいと考えています。
私の問題は、トラフィック分割がバージョンにのみ適用できることです。そのため、古いバージョンと新しいバージョンは同じモジュールにある必要があり、同じモジュールは同じ言語で書かれている必要があります (ここで間違っていました。更新された部分を参照してください)。しかし、私は PHP から Python に移行しています。
私にとって最善の解決策は何ですか?
ありがとう、
解決
Dan Cornilescu の助けを借りて、これは私がすることです:
- アプリをデフォルトと旧バージョンの 2 つのモジュールに分割します。
- デフォルトのモジュールにディスパッチ
/signIn/
し、残りは古いバージョンのモジュールにディスパッチします。 - Pythonで
/signIn/
( default モジュール)の別のバージョンを作成する - トラフィック分割を構成して、Python 部分へのリクエストの割合を徐々に増やします。これにより、重大なバグが発生していないことをテストして確認することができます。
注: /signIn/
GAE のトラフィック分割はデフォルト モジュールでのみ機能するため、パーツはデフォルト モジュールである必要があります。
1つのモジュールで言語違いで2バージョン作れることを確認しました。
google-app-engine - 本番環境のデフォルト設定時に、dispatch.yaml がタスク キューに対して機能しない
アプリを 2 つのモジュールに分解し始め、App Engine でアプリを正常に実行できるようになりました。モジュール/バージョン固有の URL を使用してトラフィックを誘導し、エラーなしで処理されたリクエストとタスク キュー イベントを確認することで、新しい構成を確認できます。
たとえば、http://micro-services.msn-transit-api.appspot.comを使用すると、トラフィックがデフォルト以外の新しいバージョンに正しく転送されます。
しかし、GAE コンソールでデフォルト バージョンを更新すると、新しいモジュールにディスパッチする必要があるリクエストが正しくルーティングされません。それらはデフォルト モジュールにディスパッチされ、エンドポイントが移動したため失敗します。
dispatch.yaml が有効化されていないかのようです。
デフォルトのアプリ yaml ファイル:
新しいモジュール yaml ファイル:
ディスパッチ yaml :
失敗しているエンドポイントがタスク キュー内のジョブにヒットしていることに注意してください。
GAE のバージョンをデフォルトに設定すると、その動作が変わるのはなぜですか?
java - シンプルな AppEngine Java プロジェクトを変換してモジュールを使用する
この質問はこれに似ていますが、それで問題は解決しませんでした。
私は非常に単純な Google AppEngine / Java アプリケーションを持っています。これは 2011 年から実行されており、maven やその他必要のない凝ったものは使用していません。最近、このアプリケーションに Cloud Endpoints を追加しました。私は generated を使用しませんでしendpoint-libs
た。これは必要ないように思われたためです。
アプリケーションには、しばらく前からフロントエンドとバックエンドがありました。これらをモジュールに変換しようとしています。フロントエンドはデフォルトのモジュールになり、バックエンドは別のモジュールになります。
私の古いプロジェクトの構造は次のようになります。
Java クラスに適切な注釈を付けることで、クラウド エンドポイントを実装しました。派手な魔法を生成する魔法はありません。
次のように、モジュールごとにディレクトリを作成する必要があることを理解しています。
私の質問は次のとおりです。
src
ディレクトリはどこに置くべきですか?- でクラウド エンドポイント クラスを宣言する必要があり
default/WEB-INF/web.xml
ますか? - 各モジュールは独自のものを持つことができます
WEB-INF/cron.xml
か?
自分が何をしているのかわからないように思われる場合は、おそらく正しいですが、すべてを maven pom ファイルに入れたり、gradle スクリプトなどを作成したり、代わりに実際のアプリケーションに集中したりする必要はありません。それはおそらく、自分たちでコードを書いていた時代に、私が vi と emacs とともに育ったからでしょう。;)
アップデート:
src ディレクトリをand とproject
同じレベルに配置しました。コンパイルされた Java クラスが の下に表示されます。これは、正しいことを行ったことを示しています。GAE は でファイルを生成します。これは、モジュールを使用していないときは見られませんでした。default
module
default/WEB-INF/classes
*.api
default/WEB-INF
ローカルでは、クラウド エンドポイント API を確認でき、それらを使用できます。AppEngine にデプロイし、API エクスプローラーを使用しようとすると、例外が発生します。
/_ah/spi/BackendService.getApiConfigs java.lang.NullPointerException at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:100) at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet) .java:71) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) で javax.servlet.http.HttpServlet.service(HttpServlet.java:717) で
など...
OAuth2 資格情報を追加して、クラウド エンドポイント構成に設定しました。のコードが見つかりませんSystemServiceServlet
でしたが、私の API クラス ( で構成されているdefault/WEB-INF/web.xml
) が見つからないのではないかと推測されます。
別の更新:
AppEngine モジュールにはエンタープライズ アーカイブ (ear) 構造が必要であり、単純な GAE アプリケーションのようにデプロイするのはうまくいかないことを知りました。「ボタンを 1 回押す」展開はありません。Java を使用した Google App Engine のプログラミングの指示に従い、最終的に多数の Eclipse プロジェクトを作成しました。かなりエンタープライズ向けですが、以前にデプロイした単純なバージョンと同じ例外をスローすることができます。少しでも進歩したのだろうか。
google-app-engine - Google App Engine モジュールで TensorFlow を使用できますか?
GAE アプリケーションの一部としてデータ処理モジュールがあります。TensorFlow には Linux 用と OSX 用に別々のインストーラーがあり、これは GAE サンドボックスではうまく動作しない可能性があることを示しています。GAE モジュールで TensorFlow を使用することは可能ですか?
python - GAE modules.get_current_version_name() で KeyError 例外が発生する
同じデータストアで実行されますが、コードベースが異なる 2 つのバージョン (マスターとステージング) を持つ Google アプリ エンジン アプリケーションがあります。
私のstackoverflow検索とgae python docsによると、関数 modules.get_current_version_name() は、私の場合は「ステージング」または「マスター」のバージョン名を返す必要があります。
ただし、それを呼び出すと、KeyError 例外が発生します。os.environ などで実際の dict ルックアップを実行すると、存在しないキー 'CURRENT_VERSION_ID' を取得しようとするようです。
その環境変数を設定するために必要な手順はありますか? これはまだアプリ/モジュールのバージョンを取得する正しい方法ですか、それとも他のオプションはありますか?