2016-06-24 10 views
13

NodeJS、MongoDB(ドライバとしてのMongoose)、ExpressJSを使用した完全なWebアプリケーションがあります。NodeJSのGoogle App Engine 502(不良ゲートウェイ)

プロジェクトは私のローカルマシンで完全に動作します。今日私はすべてを生産に移すことに決めました。私は私のアプリケーションをホストするためにGoogle App Engineを使用していて、Compose(正式にはMongoHQ)を使ってデータベースをホストしています。

私のAPIは機能していませんが、App Engineは完全にアプリケーションです。私のAPIはexample.com/apiから提供され、各リクエスト(GETPOSTDELETEPUT)はすべて502(Bad Gateway)エラーを返します。

リモートMongoDBデータベースに接続しているときにローカルマシンでアプリケーションを実行しようとしましたが、正常に動作しました。したがって、MongoDBではなく、App EngineまたはNodeJSの問題である必要があります。

私はGoogle Cloud内のすべてのエラーログを確認しようとしましたが、エラーはありません。

私のAPIへのリクエストは許可されませんが、App Engine/NodeJSはアプリケーションの静的コンテンツを完全にうまく扱うのはなぜですか?

答えて

10

502悪いゲートウェイは通常Nginx側でエラーです。残念ながら、それらのログはまだCloud Loggingに浮上していません。

多くの場合、HTTPパケットがバッファなどのために大きすぎるという問題があります。あなたがnginxのログを見る方法は次のようなものです:

  • ただ1つのVMを使用してください。これは厳密には必要ではありませんが、1台のマシン上でのリクエストが分かっている場合は、アプリケーションのデバッグが容易になります。あなたはをapp.yamlにこれを追加することでこれを実現することができます:

manual_scaling: instances: 1 再度展開

  • は自己管理に「Googleが所有している」からVMを切り替えます。これは、クラウドコンソールで行うことができます。 Compute Engineのインスタンスに移動し、App Engineのバージョンと一致するインスタンス名をクリックすると、それを自己管理に切り替えるオプションが表示されます。実行中のコンテナを参照するために、マシン

  • docker psにSSHで接続するには

  • gcloud compute ssh <instance name>。 nginxという名前のコンテナを探し、そのIDを取得します。

  • コンテナIDを取得したら、docker exec -it <container id> -- cat /var/log/nginx/error.logにできるはずです。そのログディレクトリ全体をlsにすることができます。

何が起こっているのかについての大きなヒントが表示される可能性があります。

これは、これよりも複雑な方法です: - \上記の手順に問題がある場合は、コメントを残してください。エラーが見つかった場合、それをどうするかわからない場合は、コメントを残してください。

+0

はさてここで、プロットツイストだ8080ポートでサーバーがリッスンことを確認してください。私の 'app.yaml'ファイルに' manual_scaling:instances:5'を追加し、それを展開することで問題全体が修正されました。それがどうしていいのか? – Fizzix

+0

画像のアップロードなど、より高度なAPIにアクセスしようとすると、まだ失敗します。これはおそらく私のAPIに大きなBase64文字列を送るためです。サーバーAPIに送信できるデータの量を増やす方法はありますか? – Fizzix

+0

うわー、私はmanual_scalingを意味していただけです。インスタンスは5ではなく1に設定されています!そうすれば、あなたはあなたが何を見ているのかを確実に知ることができます。私はまだあなたがエラーログを見つけることができないかどうかを確認するためにこれらの手順の残りの部分に従います。とにかく、あなたのパケットがバッファーにとって大きすぎる場合は、直接増やす方法がないので、複数のパケットに送信する必要があるデータをどのように分割するのが最善かを判断することです。 –

関連する問題