Laravel Sail (PHP8.3) で PostgreSQL に接続できない

2024/07/21に公開

Laravel Sail を使って気軽に Supabase に接続できるか試したかったが
思いの外ハマったので共有します。

これをやりたかっただけ
https://supabase.com/docs/guides/getting-started/quickstarts/laravel

原因

php8.3-swoole が原因?のよう

環境

% ./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