問題
Go Blobstore APIを使用してファイルをアップロードすると、成功パスが間違ったappengine モジュールにリダイレクトされます。問題のより視覚的な説明は次のとおりです。
- ユーザーがモジュールAのアップロード ページに移動します。
http://A.my-appengine-app.com/upload
- ユーザーのブラウザーは、モジュールにアップロード セッションの要求を行います。
http://A.my-appengine-app.com/upload/session
- モジュールA
/upload/session
は、次の Go コードを実行するハンドラーを定義します。url, err := blobstore.UploadURL(c, "/upload/success")
- このメソッドは、次のような URL を返します。
http://A.my-appengine-app.com/_ah/upload/[some long hash]/
action
この URL はユーザーのブラウザに中継され、の に挿入され<form>
ます。- ユーザーが
POST
URL にマルチパート リクエストを送信します。 - URL を処理するもの (ユーザー空間以外の appengine ハンドラー) は、リダイレクトを試みます。
/upload/success
これは物事が奇妙になるところです。開発中、サーバーはモジュールA の「/upload/success」にリダイレクトします。本番環境では、サーバーはメイン モジュールにリダイレクトします。これは、今のところBと呼ぶことができます。Web コンソールでを取得していて、モジュールB404
に対してリクエストが行われていることがログに示されているため、これが発生していることがわかります。成功パスの一部としてホスト名を明示的に渡すことさえしましたが(ステップ #3)、効果はありませんでした。
現在のソリューション (理想的ではない)
私の唯一の手段は、モジュールBでハンドラーを定義して、モジュールAのようにリクエストを処理することです。goapp アーキテクチャはすべてのモジュールをまとめてグロブ化するため、これは世界で最悪のトレードオフではありませんが、モジュールが垂直方向に独立していることを考えると、意味的に間違っています。誰かがこれを回避する方法を知っていれば、私は義務付けられます. とりあえず、上記の方法でいきます。