Composer читает неправильную версию PHP при установке через Nix flake

Я создаю плагин WordPress, но мне нужно подключиться к Xero API. Xero предлагает использовать плагин композитора xero-php-oauth2, поэтому я настроил свой плагин WP на использование композитора, который работает. И я успешно установил и использовал phpdotenv в качестве теста.

К сожалению, я получаю следующую ошибку:

Fatal error: Composer detected issues in your platform: Your Composer  dependencies require a PHP version "\>= 8.1.0". You are running  8.0.28. in  /var/www/html/wp-content/plugins/tws-eta-api-visualisations/vendor/composer/platform_check.php  on line 24

Композитор, кажется, думает, что моя версия PHP 8.0.28, когда я работаю 8.1.17, и я не могу понять, почему.

Я настраиваю PHP и композитор с хлопьями Nix:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
      in {
        devShell = with pkgs; pkgs.mkShell {
          buildInputs = [
            php81
            php81.packages.composer
            nodejs-16_x
            (yarn.override { nodejs = nodejs-16_x; })
          ];

          shellHook = ''
            if [ ! -d "vendor" ]; then
              ${php81}/bin/php ${php81.packages.composer}/libexec/composer/composer.phar update
              composer install
            fi

            if [ ! -d "node_modules" ]; then
              yarn install --immutable
            fi

            yarn build

            open http://localhost:8000
          '';
        };
      }
    );
}

Кто-нибудь знает, что я могу сделать, чтобы решить мою чешуйку?

Я пытался следовать различным онлайн-руководствам по настройке версии Composer PHP с помощью обновлений конфигурации, команд установки и composer.phar.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это может быть не актуально для всех, но это то, что произошло со мной.

Я запускал свой экземпляр WordPress в Docker, и Docker установил свою версию PHP на 8.0.28...

Итак, пока мой флейк Nix правильно устанавливал версию PHP, после того, как файлы были переданы в Docker, он использовал версию Dockers PHP.

Обновление образа WordPress для создания докеров до image: wordpress:6.0-php8.1-apache решило эту проблему для меня.

Ваш ответ звучит для меня как законное решение, особенно если вы используете одну и ту же версию PHP для разработки и производства.

Если он расходится, как в рассматриваемом сценарии, вы также можете указать через конфигурацию Composer (composer.json), как выглядит платформа, чтобы Composer принял это за платформу, а не за платформу.

Например. во флейке вы переходите на PHP 8.2, в composer.json вы указываете Composer по-прежнему разрешать зависимости на PHP 8.1, поскольку вы еще не перенесли контейнер докера, поскольку сначала хотите протестировать конфигурацию флейка только для разработки.

Я понятия не имею, как указать через flake использовать этот параметр в composer.json только во время сборки, а не во время разработки.

Спасибо, это похоже на достойную временную меру для предотвращения возникновения подобных проблем. В какой-то момент я тоже хочу управлять своими образами Docker с помощью Nix. Я надеюсь, что это позволит мне унифицировать зависимости моего проекта.

dxj197i6 30.03.2023 10:17

@ dxj197i6: Предлагая nix-контейнер, я тоже был близок. Это полностью предотвращает основную проблему, и вы можете управлять платформой в коде nix. Так что теперь, когда вы это пишете, да, посмотрите на это. И разместите вопросы на SO, нам нужно больше контента, связанного с nix + php;)

hakre 30.03.2023 12:20

Другие вопросы по теме