【问题标题】:Larvel Sail: Installing Composer Dependencies For Existing Applications on Apple Silicon M1 FailsLaravel Sail:在 Apple Silicon M1 上为现有应用程序安装 Composer 依赖项失败
【发布时间】:2021-10-18 23:52:20
【问题描述】:

我在一台装有 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.

感谢您对此问题的任何帮助。

【问题讨论】:

  • 您尝试过什么解决问题的方法? could not find driver 通常在未安装已配置数据库的驱动程序时抛出。这不是 Composer 的问题,而是您的应用程序的问题
  • Laravel Sail 使用 Docker 容器。在 x86 处理器上,Laravel Sail 工作得很好。在 Apple Silicone 上运行时,问题不在于我的应用程序,而在于 Laravel Sail 或 Docker。
  • 问题很可能出在 laravelsail/php74-composer:M1 处理器上的最新图像。
  • 你尝试过什么来解决这个问题?您使用哪个数据库?安装了哪些驱动程序?
  • 如果您在安装包的过程中运行脚本,任何事情都可能发生。如果您想避免这种情况,请使用 no-scripts 标志

标签: php laravel composer-php apple-m1 laravel-sail


【解决方案1】:

当您使用以下命令时,只会启动一个非常特定的容器:

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 的脚本功能,这可能会导致问题,因为某些脚本可能期望在运行时环境中安装任何 PHP 扩展,或者也启动任何依赖容器。

在您的情况下,至少缺少一个运行您的应用程序的 PHP 扩展:

> @php artisan package:discover --ansi

   Doctrine\DBAL\Driver\PDO\Exception

  could not find driver

该脚本试图打开一个数据库连接,但找不到该连接所需的扩展,因为laravelsail/php74-composer 不包含任何数据库驱动程序。


解决方案:运行 composer install 并附加标志 --no-scripts。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2021-09-11
    • 2021-04-03
    • 2021-05-08
    • 2021-11-08
    • 2022-01-22
    • 1970-01-01
    • 2021-09-01
    • 2021-04-21
    相关资源
    最近更新 更多