本文へ移動

SkyWay版で困ったとき ​

トークン発行サーバー(PHP版・Vercel版・Cloudflare版)で、よくあるつまずきと、その直しかたをまとめました。まずブラウザで、トークン発行サーバーのURLの後ろに/v1/statusを付けたものを開き、何が出るかを見てください(例:https://example.com/backend/v1/status)。

/v1/statusの結果から探す ​

出たもの意味と、見るところ
OKPHP版が正しく動いています。Axeからつながらないへ
ORIGIN_REQUIREDを含む文字Vercel版が正しく動いています(ブラウザで直接開くとOriginが付かないので断る)。Axeからつながらないへ
CONFIG_INVALIDを含む文字Vercel版の環境変数が足りないか、形が違います。Vercel版の設定が読めないへ
真っ白、または「500 Internal Server Error」PHP版の.envが読めないか、PHPが古い。PHP版で500になるへ
「404 Not Found」(サーバーの画面)、ファイルの一覧PHP版で.htaccessが効いていないか、置き場所が違う。PHP版で404になるへ
{"error":"Origin is required."}PHP版で、URLの綴りが違う(/v1/statusのほかのURLは、ブラウザで開くとこう返る)

PHP版で500になる ​

  1. .envがあるか:FileZillaなどで隠しファイルを表示して、index.phpと同じフォルダに.envがあるかを確かめます(→ レンタルサーバーに置く)。
  2. 名前が正しいか:.env.txtやenvになっていないかを見ます。
  3. 必須の値があるか:SKYWAY_APP_IDとSKYWAY_SECRETが空でないかを確かめます。
  4. SKYWAY_UDONARIUM_LOBBY_SIZEが1以上の整数か:3のように数字だけを書きます。
  5. PHPの版が8.3以上か:管理画面でPHPの版を確かめます。8.2以前ではエラーになります。
  6. エラーログ:レンタルサーバーの管理画面から、PHPのエラーログを見ます。No .env file foundやSKYWAY_APP_ID is requiredのように、原因が書いてあります。

PHP版で404になる ​

  1. .htaccessが上がっているか:隠しファイルを表示して確かめます。
  2. .htaccessが効くサーバーか:mod_rewriteと、.htaccessでの設定(AllowOverride)が許されている必要があります。サーバーの説明書で確かめてください。
  3. 置き場所:index.phpが、開いているURLのフォルダの直下にあるかを確かめます。フォルダごとアップロードして、1段深くなっていることがよくあります。

.htaccessが使えないサーバーでは使わないでください

.htaccessが効かないと、.envがWebから読めてしまうおそれがあります。その場合は、PHP版ではなくVercelを使ってください。

Vercel版の設定が読めない ​

CONFIG_INVALIDのときは、環境変数が足りないか、値の形が違います。

  1. プロジェクトのEnvironment Variablesで、SKYWAY_APP_ID、SKYWAY_SECRET、ACCESS_CONTROL_ALLOW_ORIGINがあるかを確かめます。
  2. SKYWAY_TOKEN_TTL_SECONDSを入れたなら、60〜604800の数字かを確かめます。
  3. 直したら、Redeployします。環境変数を変えても、いま動いているデプロイには反映されません(→ Vercelに置く)。

原因は、プロジェクトのLogsにも出ます。

Axeからつながらない ​

/v1/statusは正しいのに、Axeで部屋に入れないときです。Axeを開いたブラウザで開発者ツールを開き、コンソールとネットワークを見ます(→ 設置の準備)。

見えるもの原因と直しかた
CORSのエラー(Access-Control-Allow-Originが無い、違う)ACCESS_CONTROL_ALLOW_ORIGINが、Axeを開いているページのOriginと一致していない。PHP版では末尾の/も確かめる
403(PHP版はForbidden.、Vercel版とCloudflare版はORIGIN_FORBIDDEN)上と同じ。許可していないOriginから来ている
混在コンテンツ(Mixed Content)のエラーAxeがhttps://なのに、backend.urlがhttp://になっている
リクエストが飛んでいないAxeのassets/config.jsonのbackend.urlが空か、間違っている
404backend.urlにパスが余分に付いている(例:.../v1まで書いている)か、足りない(サブディレクトリの名前が抜けている)

ときどき最初の1回だけ失敗する(Vercel版) ​

しばらく使われていないと、Vercelの関数は眠った状態になり、最初の1回の応答に時間がかかることがあります(コールドスタート)。Axeは、つながらないときや一時的なエラーのときに、間を置いて何度か試し直します。たいていは試し直しで通るので、気にしなくて構いません。

トークンは返るのにSkyWayにつながらない ​

  • アプリケーションIDとシークレットキーの組み合わせ:別のアプリケーションのシークレットキーを入れていると、署名が合わずにSkyWayが断ります。SkyWayのコンソールで、同じアプリケーションのIDとキーかを確かめます。
  • 値の前後の空白:値を貼るとき、前後に空白や改行が入っていないかを確かめます。
  • PHP版の値の中の;:値を"で囲まずに書くと、;から後ろが切り捨てられます。.envで"で囲みます。
  • PHP版のサーバーの時計:トークンには発行時刻と期限が入っています。サーバーの時計が大きくずれていると、SkyWayが期限切れと判断することがあります。

それでも解決しないとき ​

Issuesで知らせてください。使っている版(PHP版ならレンタルサーバーの名前とPHPの版)、/v1/statusの結果、開発者ツールに出たエラーを書いてもらえると助かります。.envや環境変数の値(特にシークレットキー)は貼らないでください。

MITライセンスで公開しています