Laravel Sail:在 Apple Silicon M1 上为现有应用程序安装 Composer 依赖项失败
Larvel Sail: Installing Composer Dependencies For Existing Applications on Apple Silicon M1 Fails
我在配备 Apple M1 处理器的机器上克隆了一个现有应用程序。然后使用以下命令将其引入 (Ref).
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
然后也试了:
docker run --rm --platform linux/amd64 \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
这两个命令都失败并显示相同的消息:
> @php artisan package:discover --ansi
Doctrine\DBAL\Driver\PDO\Exception
could not find driver
at vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php:18
14▕ final class Exception extends PDOException
15▕ {
16▕ public static function new(\PDOException $exception): self
17▕ {
➜ 18▕ return new self($exception);
19▕ }
20▕ }
21▕
+1 vendor frames
2 [internal]:0
Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(App\Providers\AppServiceProvider))
+18 vendor frames
21 app/Providers/AppServiceProvider.php:94
Illuminate\Support\Facades\Facade::__callStatic("listen")
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1
但是,我可以从主机和容器内部执行 php artisan package:discover --ansi
命令:
./vendor/bin/sail artisan package:discover --ansi
["select * from `data_types`",[],79.14]
Discovered Package: arrilot/laravel-widgets
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: intervention/image
Discovered Package: kreait/laravel-firebase
Discovered Package: larapack/doctrine-support
Discovered Package: larapack/voyager-hooks
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: lexxyungcarter/chatmessenger
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: tcg/voyager
Package manifest generated successfully.
感谢任何对此问题的帮助。
当您使用以下命令时,只会启动一个非常特定的容器:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
容器包含 运行 Composer 所需的一切 - 但仅此而已。它可能不包含 运行 您的应用程序所需的所有 PHP 扩展,该命令也不会启动为您的应用程序提供依赖项的其他容器,例如数据库容器。
如果您仅 运行 安装应用程序依赖项所需的步骤,一切都会正常进行。但是,如果您还使用 Composer 的脚本功能,这可能会导致问题,因为某些脚本可能期望在 运行time 环境中安装任何 PHP 扩展,或者任何依赖容器也已启动。
在您的情况下,您的申请 运行 至少缺少一项 PHP 扩展:
> @php artisan package:discover --ansi
Doctrine\DBAL\Driver\PDO\Exception
could not find driver
该脚本试图打开数据库连接,但找不到此连接所需的扩展,因为 laravelsail/php74-composer
不 包含任何数据库驱动程序。
解决方案:运行 composer install
附加标志 --no-scripts
.
我在配备 Apple M1 处理器的机器上克隆了一个现有应用程序。然后使用以下命令将其引入 (Ref).
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
然后也试了:
docker run --rm --platform linux/amd64 \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
这两个命令都失败并显示相同的消息:
> @php artisan package:discover --ansi
Doctrine\DBAL\Driver\PDO\Exception
could not find driver
at vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php:18
14▕ final class Exception extends PDOException
15▕ {
16▕ public static function new(\PDOException $exception): self
17▕ {
➜ 18▕ return new self($exception);
19▕ }
20▕ }
21▕
+1 vendor frames
2 [internal]:0
Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(App\Providers\AppServiceProvider))
+18 vendor frames
21 app/Providers/AppServiceProvider.php:94
Illuminate\Support\Facades\Facade::__callStatic("listen")
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1
但是,我可以从主机和容器内部执行 php artisan package:discover --ansi
命令:
./vendor/bin/sail artisan package:discover --ansi
["select * from `data_types`",[],79.14]
Discovered Package: arrilot/laravel-widgets
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: intervention/image
Discovered Package: kreait/laravel-firebase
Discovered Package: larapack/doctrine-support
Discovered Package: larapack/voyager-hooks
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: lexxyungcarter/chatmessenger
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: tcg/voyager
Package manifest generated successfully.
感谢任何对此问题的帮助。
当您使用以下命令时,只会启动一个非常特定的容器:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php74-composer:latest \
composer install --ignore-platform-reqs
容器包含 运行 Composer 所需的一切 - 但仅此而已。它可能不包含 运行 您的应用程序所需的所有 PHP 扩展,该命令也不会启动为您的应用程序提供依赖项的其他容器,例如数据库容器。
如果您仅 运行 安装应用程序依赖项所需的步骤,一切都会正常进行。但是,如果您还使用 Composer 的脚本功能,这可能会导致问题,因为某些脚本可能期望在 运行time 环境中安装任何 PHP 扩展,或者任何依赖容器也已启动。
在您的情况下,您的申请 运行 至少缺少一项 PHP 扩展:
> @php artisan package:discover --ansi
Doctrine\DBAL\Driver\PDO\Exception
could not find driver
该脚本试图打开数据库连接,但找不到此连接所需的扩展,因为 laravelsail/php74-composer
不 包含任何数据库驱动程序。
解决方案:运行 composer install
附加标志 --no-scripts
.