Я создаю плагин 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
.
Это может быть не актуально для всех, но это то, что произошло со мной.
Я запускал свой экземпляр 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 только во время сборки, а не во время разработки.
@ dxj197i6: Предлагая nix-контейнер, я тоже был близок. Это полностью предотвращает основную проблему, и вы можете управлять платформой в коде nix. Так что теперь, когда вы это пишете, да, посмотрите на это. И разместите вопросы на SO, нам нужно больше контента, связанного с nix + php;)
Спасибо, это похоже на достойную временную меру для предотвращения возникновения подобных проблем. В какой-то момент я тоже хочу управлять своими образами Docker с помощью Nix. Я надеюсь, что это позволит мне унифицировать зависимости моего проекта.