読者です 読者をやめる 読者になる 読者になる

koni blog

東京のウェブエンジニア koni です!ウェブサービスをガシガシ作っていきます!

Google Cloud SDK 入れたら、Google App Engine の開発サーバー dev_appserver.py でPHPが動かなくなる問題への対処

Google Cloud SDKを入れたら、Google App Engine(GAE)用のローカルの開発サーバー dev_appserver.pyが以下のようなエラーを吐いて、動かなくなってしまいました。

$ cd /path/to/project_root
$ dev_appserver.py .
INFO     2016-06-15 02:15:02,903 devappserver2.py:769] Skipping SDK update check.
INFO     2016-06-15 02:15:02,964 api_server.py:205] Starting API server at: http://localhost:52471
INFO     2016-06-15 02:15:02,972 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2016-06-15 02:15:02,974 admin_server.py:116] Starting admin server at: http://localhost:8000
ERROR    2016-06-15 02:15:03,980 php_runtime.py:348] The PHP runtime is not available
Traceback (most recent call last):
  File "/Users/koni/src/tool/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/php_runtime.py", line 344, in new_instance
    self._check_binaries(php_executable_path, gae_extension_path)
  File "/Users/koni/src/tool/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/php_runtime.py", line 265, in _check_binaries
    raise _PHPBinaryError('The development server must be started with the '
_PHPBinaryError: The development server must be started with the --php_executable_path flag set to the path of the php-cgi binary.

--php_executable_pathでPHP-CGIのバイナリのパスを指定しろとのこと。 GAEのPHPのバイナリは、GAEのプラグインが入っている専用のものなので、ローカルのPHP使うならエクステンションを入れないといけません。

原因

ではなぜいままで動いていたかというと、dev_appserver.pyはこれまでGoogle Cloud SDKのものではなくて、GoogleAppEngineLauncher.app内蔵のものを使っていたようです。 それがGoogle Cloud SDKを入れた時にそちらのものを使うようになってしまったようです。 GoogleAppEngineLauncher.appには、GAE用のエクステンションが入ったphp-cgiが内蔵されているので、それを使って動いていたようです。

解決方法

dev_appserver.pyは、Google Cloud SDKのものではなく、GoogleAppEngineLauncher.appのものを使う。

私の環境では以下のパスにありました。

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/dev_appserver.py

こっちを使ったら普通に動きました。

ちょっと逃げですが、ローカル環境だし動いたからこれでいいかと。。

参考

The PHP Development Server  |  PHP  |  Google Cloud Platform