⛵
Laravel Sail (PHP8.3) で PostgreSQL に接続できない
Laravel Sail を使って気軽に Supabase に接続できるか試したかったが
思いの外ハマったので共有します。
これをやりたかっただけ
原因
php8.3-swoole が原因?のよう
- https://stackoverflow.com/questions/78683430/laravel-and-php8-3-cant-connect-to-postgre-database
- https://github.com/php/php-src/issues/14665
環境
% ./vendor/bin/sail php -v
PHP 8.3.9 (cli) (built: Jul 5 2024 12:03:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
with Zend OPcache v8.3.9, Copyright (c), by Zend Technologies
with Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans
% ./vendor/bin/sail php -m | grep swoole
swoole
対応方法
Docker ファイルと関連ファイルを書き出す
% ./vendor/bin/sail artisan sail:publish
docker/8.3/Dockerfile
ファイル内の swoole をコメントアウトないし削除する
php8.3-msgpack php8.3-igbinary php8.3-redis \
# php8.3-swoole \
php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug \
Sail 再ビルド
% ./vendor/bin/sail down
% ./vendor/bin/sail build --no-cache
これで PostgreSQL に接続できました。
php8.3-swoole の問題が修正されるといいなぁ🥺
ちなみに
Supabase のマニュアルではスキーマを public
から変えるのを推奨している。
そのためスキーマを変える場合は php artisan migrate
する前にスキーマを作成しておく必要あり。
Change the default schema
By default Laravel uses the public schema. We recommend changing this as supabase exposes the public schema as a data API.
You can change the schema of your Laravel application by modifying the search_path variable app/config/database.php.
% ./vendor/bin/sail artisan tinker
Psy Shell v0.12.4 (PHP 8.3.9 — cli) by Justin Hileman
> DB::statement("CREATE SCHEMA IF NOT EXISTS laravel");
= true
Discussion