laravel - 似乎由于版本不兼容而无法安装 laravel/sail

标签 laravel laravel-6 laravel-sail

我正在尝试将 laravel/sail 安装到一个现有项目中,该项目之前似乎没有安装过。我相信这个项目通常是在 vagrant 上运行的。

我正在尝试使用 Laravel Sail 让它在 WSL2 上运行。我也不完全确定这是否是我的最佳方法。

我的理解是,我可以使用 sail 通过 docker 运行项目,只需最少的设置和配置。

当我尝试通过 composer 安装 sail 时,我似乎遇到了错误。这些是我遵循的说明:https://laravel.com/docs/9.x/sail#installing-sail-into-existing-applications

这是错误:

$ composer require laravel/sail --dev
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20190902/pdo_mysql (/usr/lib/php/20190902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_mysql.so (/usr/lib/php/20190902/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
Using version ^1.13 for laravel/sail
./composer.json has been updated
Running composer update laravel/sail
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires laravel/sail ^1.13 -> satisfiable by laravel/sail[v1.13.0, ..., 1.x-dev].
    - laravel/sail[v1.13.0, ..., 1.x-dev] require illuminate/contracts ^8.0|^9.0 -> found illuminate/contracts[v8.0.0, ..., 8.x-dev, v9.0.0-beta.1, ..., 9.x-dev] but these were not loaded, likely because it conflicts with another require.

You can also try re-running composer require with an explicit version constraint, e.g. "composer require laravel/sail:*" to figure out if any version is installable, or "composer require laravel/sail:^2.1" if you know which you need.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

我不完全确定如何解释这一点,但看起来正在尝试安装的版本与另一个必需的包不兼容。

composer.json 文件:

{
        "name": "laravel/laravel",
        "description": "The Laravel Framework.",
        "keywords": [
                "framework",
                "laravel"
        ],
        "license": "MIT",
        "type": "project",
        "require": {
                "php": "^7.4",
                "composer-runtime-api": "^2.0",
                "aws/aws-sdk-php-laravel": "^3.6",
                "doctrine/dbal": "^2.8",
                "fideloper/proxy": "^4.0",
                "guzzlehttp/guzzle": "^7.3",
                "laravel/framework": "6.*",
                "laravel/nexmo-notification-channel": "^2.5",
                "laravel/passport": "9.4.*",
                "laravel/tinker": "^1.0",
                "maatwebsite/excel": "^3.1",
                "nexmo/laravel": "^2.4",
                "rap2hpoutre/laravel-log-viewer": "1.7.*",
                "spatie/laravel-uptime-monitor": "^3.7",
                "vonage/client": "^2.4"
        },
        "require-dev": {
                "barryvdh/laravel-debugbar": "^3.2",
                "barryvdh/laravel-ide-helper": "^2.8",
                "filp/whoops": "^2.0",
                "fzaninotto/faker": "^1.4",
                "mockery/mockery": "^1.0",
                "nunomaduro/collision": "^3.0",
                "phpunit/phpunit": "^7.1"
        },
        "autoload": {
                "classmap": [
                        "database",
                        "app/Http/Controllers",
                        "app/Console/Commands"
                ],
                "psr-4": {
                        "App\\": "app/"
                }
        },
        "autoload-dev": {
                "psr-4": {
                        "Tests\\": "tests/"
                }
        },
        "extra": {
                "laravel": {
                        "dont-discover": []
                }
        },
        "scripts": {
                "post-root-package-install": [
                        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
                ],
                "post-create-project-cmd": [
                        "@php artisan key:generate"
                ],
                "post-autoload-dump": [
                        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
                        "@php artisan package:discover"
                ]
        },
        "config": {
                "platform": {
                        "php": "7.4"
                },
                "preferred-install": "dist",
                "sort-packages": true,
                "optimize-autoloader": true
        },
        "minimum-stability": "dev",
        "prefer-stable": true
}

最佳答案

不幸的是,您将无法使用 laravel/sail 基于您当前的 Laravel 框架版本。

说明:

laravel/sail="1.13" 需要 illuminate/contracts : ^8.0|^9.0`

现在,问自己一个问题,哪些包依赖于illuminate/contractsLaravel v6 中?

命令:composer depends illuminate/contracts

输出:

Info from https://repo.packagist.org: #StandWithUkraine
fideloper/proxy    4.4.1     requires  illuminate/contracts (^5.0|^6.0|^7.0|^8.0|^9.0)
laravel/framework  v6.18.43  replaces  illuminate/contracts (self.version)
laravel/tinker     v1.0.10   requires  illuminate/contracts (~5.1|^6.0)

根据上面的输出,您有点意识到所有依赖项之间的通用 illuminate/contracts 版本是^6.0 .

考虑到这一点,您通常需要安装 laravel/sail需要 illuminate/contracts 的版本: ^6.0`

不幸的是,这不可能。之所以如此,是因为即使是第一个 laravel/sail版本 ( dev-develop ) 需要 illuminate/contracts : ^8.0|^9.0|^10.0.

现在,最合理的选择是首先升级项目中依赖于illuminate/contracts 的包。在上面的输出 中的所有 3 个包中,有 Laravel 框架。可悲的是,第一个满足 illuminate/contracts: ^8.0|^9.0 的框架版本要求是 laravel/framework v8.0.0 。如果这是你会考虑的事情,那么你可能想看看 Laravel 8 upgrade guide .

可能的解决方案:

考虑到 Laravel Sail只是一个工具,为您提供使用 PHP、MySQL 和 Redis 构建 Laravel 应用程序的起点,而无需先前的 Docker 经验,还有其他工具可以以类似的方式完成工作。

我可能建议的一个工具是 Laradock .


如果您有足够的 Docker 经验,您甚至可以借助来自 Docker Hub 的现成的公共(public)官方 Docker 图像,从头开始部署您自己的 Docker 设置。 .

关于laravel - 似乎由于版本不兼容而无法安装 laravel/sail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71652070/

相关文章:

php - App Engine 标准 : The/srv/bootstrap/cache directory must be present and writable 上的 Laravel

Laravel 更新后看不到现有的供应商类

php - Laravel API 资源 : How to return infinite nested array of categories with their children?

php - Laravel 8 - SQLSTATE[HY000] [2002] 没有那个文件或目录

macos - Laravel Sail & Docker 添加额外站点(多项目)

php - 自动登录 Laravel 5 中的帐户

php - 不在对象上下文中时使用 $this - Laravel 4 PHP 5.4.12

laravel - 使用 URL 而不是服务名称将服务与 docker compose 连接

php - 使用ajax填充数据时Jquery DataTable排序不起作用

php - 如何在 Laravel 中验证没有数据库的用户?