Symfony Local Web Serverが急に起動できなくなってたけどすぐ解決した話
起こったこと
なんか、ある日ふと気付いたら Symfony Local Web Server が起動できなくなってました🙄
$ syfmony serve
すると
$ symfony serve
[WARNING] run "symfony server:ca:install" first if you want to run the web server with TLS support, or use "--no-tls"
to avoid this warning
Tailing Web Server/PHP log file
[Web Server/PHP ] Jul 14 01:12:41 |INFO | PHP listening path="/usr/local/Cellar/php/7.4.2/sbin/php-fpm" php="7.4.2" port=63649
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP started
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP dyld: Library not loaded: /usr/local/opt/libffi/lib/libffi.6.dylib
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP Referenced from: /usr/local/Cellar/php/7.4.2/sbin/php-fpm
[Web Server/PHP ] Jul 14 01:12:41 |DEBUG| PHP Reason: image not found
[OK] Web server listening
The Web server is using PHP FPM 7.4.2
http://127.0.0.1:8000
Shut down, bye!
PHP server exited unexpectedly: signal: abort trap
こんな感じのエラーが出て死にます。
直し方
エラーメッセージをちゃんと見ればすぐ分かりますが、
- Homebrewで入れたPHPを起動しようとしていて
-
libffi
が見つからなくてエラーになってる
ようです。
僕はローカルのPHP環境は phpenvで構築している ので、Homebrewで入れたPHPが起動されるのは想定している挙動ではありませんでした。
とりあえず symfony local:php:list
で状況を確認してみます。
$ symfony local:php:list
┌─────────┬───────────────────────────────────────┬─────────┬───────────────────────────────┬──────────────────────────────┬─────────┬─────────┐
│ Version │ Directory │ PHP CLI │ PHP FPM │ PHP CGI │ Server │ System? │
├─────────┼───────────────────────────────────────┼─────────┼───────────────────────────────┼──────────────────────────────┼─────────┼─────────┤
│ 7.1.33 │ /Users/xxxxxx/.phpenv/versions/7.1.33 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.3.11 │ /usr │ bin/php │ sbin/php-fpm │ │ PHP FPM │ │
│ 7.3.17 │ /Users/xxxxxx/.phpenv/versions/7.3.17 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.2 │ /usr/local │ bin/php │ Cellar/php/7.4.2/sbin/php-fpm │ Cellar/php/7.4.2/bin/php-cgi │ PHP FPM │ * │
│ 7.4.2 │ /Users/xxxxxx/.phpenv/versions/7.4.2 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.5 │ /Users/xxxxxx/.phpenv/versions/7.4.5 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
└─────────┴───────────────────────────────────────┴─────────┴───────────────────────────────┴──────────────────────────────┴─────────┴─────────┘
結果はこんな感じでした。思ったとおり、Homebrewで入れたPHPが起動されているようです。
出ていたエラーメッセージが
dyld: Library not loaded: /usr/local/opt/libffi/lib/libffi.6.dylib
だったので
$ brew update && brew reinstall libffi
とかしても直るかもしれませんが、そもそもHomebrewのPHPが入っていること自体想定外なので、消してしまうことにしました。
たぶん、後から
brew uninstall composer && brew install composer
とかをして、依存としてインストールされたのだと思います。
$ brew uninstall php --ignore-dependencies
これで、再度 symfony local:php:list
してみると、
$ symfony local:php:list
┌─────────┬───────────────────────────────────────┬─────────┬───────────────┬───────────────┬─────────┬─────────┐
│ Version │ Directory │ PHP CLI │ PHP FPM │ PHP CGI │ Server │ System? │
├─────────┼───────────────────────────────────────┼─────────┼───────────────┼───────────────┼─────────┼─────────┤
│ 7.1.33 │ /Users/xxxxxx/.phpenv/versions/7.1.33 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.3.11 │ /usr │ bin/php │ sbin/php-fpm │ │ PHP FPM │ * │
│ 7.3.17 │ /Users/xxxxxx/.phpenv/versions/7.3.17 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.2 │ /Users/xxxxxx/.phpenv/versions/7.4.2 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.5 │ /Users/xxxxxx/.phpenv/versions/7.4.5 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
└─────────┴───────────────────────────────────────┴─────────┴───────────────┴───────────────┴─────────┴─────────┘
The current PHP version is selected from default version in $PATH
To control the version used in a directory, create a .php-version file that contains the version number (e.g. 7.2 or 7.2.15).
If you're using SymfonyCloud, the version can also be specified in the .symfony.cloud.yaml file.
HomebrewのPHPは消えています。が、なぜか /usr/bin/php
が採用されています🤔
↑のメッセージに The current PHP version is selected from default version in $PATH
とありますが、
php -v
すると
$ php -v
PHP 7.4.5 (cli) (built: Jul 14 2020 10:25:09) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
with Xdebug v2.9.5, Copyright (c) 2002-2020, by Derick Rethans
パスは 7.4.5
に通っています。にもかかわらずなぜかsymfonyコマンドは /usr/bin/php
を見ています。これについては原因不明なので詳しい人いたらぜひ 教えてください 😓
とりあえず今回は .php-version
設定ファイルを設置して対処しました。
$ echo 7.4.5 > .php-version
これをプロジェクトルートに置いておけば、明示的に symfony
コマンドに使いたいPHPのバージョンを指定できます。
$ symfony local:php:list
┌─────────┬───────────────────────────────────────┬─────────┬───────────────┬───────────────┬─────────┬─────────┐
│ Version │ Directory │ PHP CLI │ PHP FPM │ PHP CGI │ Server │ System? │
├─────────┼───────────────────────────────────────┼─────────┼───────────────┼───────────────┼─────────┼─────────┤
│ 7.1.33 │ /Users/xxxxxx/.phpenv/versions/7.1.33 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.3.11 │ /usr │ bin/php │ sbin/php-fpm │ │ PHP FPM │ │
│ 7.3.17 │ /Users/xxxxxx/.phpenv/versions/7.3.17 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.2 │ /Users/xxxxxx/.phpenv/versions/7.4.2 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ │
│ 7.4.5 │ /Users/xxxxxx/.phpenv/versions/7.4.5 │ bin/php │ sbin/php-fpm │ bin/php-cgi │ PHP FPM │ * │
└─────────┴───────────────────────────────────────┴─────────┴───────────────┴───────────────┴─────────┴─────────┘
無事、 7.4.5
が有効になりました。
Discussion