PhpStorm не удается найти vendor/autoload.php в Docker WSL при запуске PHPUnit

#docker #phpstorm #windows-subsystem-for-linux

#docker #phpstorm #windows-subsystem-for-linux

Вопрос:

Моя текущая настройка: PhpStorm, Docker WSL, Ubuntu (WSL). Все мои файлы проекта являются локальными и находятся внутри WSL Ubuntu. Контейнер Docker и интерпретаторы CLI настроены на PhpStorm.

Кажется, он распознает PHP внутри моего контейнера «php-fpm» (он извлекает информацию о PHP). Когда я запускаю тест PHPUnit, похоже, что он подключается к моему контейнеру.

Если я правильно понимаю, PhpStorm монтирует файлы моего проекта из WSL Ubuntu в новый контейнер, который использует контейнер Docker ‘php-fpm’ для запуска модульных тестов? Но, похоже, он не монтирует файлы моего проекта внутри контейнера модульного тестирования. Я получаю следующую ошибку:

 Testing started at 11:54 AM ...
[docker://laradock/php-fpm:latest-7.3/]:php /opt/.phpstorm_helpers/phpunit.php --no-configuration --filter Tests\Feature\ExampleTest --test-suffix ExampleTest.php /opt/project/tests/Feature
The value of autoloader is specified, but file doesn't exist '/opt/project/vendor/autoload.php'

Process finished with exit code 1
  

Когда я вручную запускаю контейнер Docker (через Docker Desktop), созданный PhpStorm, и попадаю в bash, в нем нет файлов, /opt/project но есть /opt/.phpstorm_helpers/phpunit.php . В этом и заключается проблема. Фактические файлы проекта, которые мой Docker смонтировал из WSL, находятся внутри /var/www . Я попытался изменить сопоставления путей, чтобы указать на эти файлы, но все равно получаю ту же ошибку.

Любые предложения приветствуются.

Настройки Docker

CLI

Настройки PHP

Настройки платформы тестирования

Комментарии:

1. К вашему сведению: ваше первое и второе изображение выглядят одинаково…

2. В настоящее время это не поддерживается, мы не используем сопоставления путей между локальной машиной и WSL, поэтому файлы просто не попадают в контейнер. См . youtrack.jetbrains.com/issue/IDEA-242051 и связанные с этим

3. Спасибо за обновление @EugeneMorozov. Я разочарован этой новостью, но с нетерпением жду, что это будет поддержано. Похоже, это хорошая среда разработки.

Ответ №1:

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

У меня есть предварительно созданный пользовательский образ docker на основе официального образа PHP CLI с различными модулями, которые мне нужны для большей части моей разработки.

Создайте docker-compose.yml файл только с помощью службы PHP, например, мой:

 version: "3.7"

services:
  php:
    container_name: pkg
    image: my.private.registry/php7-cli:7.4.10
    volumes:
      - ./:/opt/project
    entrypoint: /bin/bash
    tty: true
  

Запустите это в WSL с docker-compose up -d

Затем при выборе удаленного интерпретатора CLI выберите Docker Compose и выберите свою службу:

введите описание изображения здесь

Выберите подключение к существующему контейнеру:

введите описание изображения здесь

В тестовых фреймворках выберите удаленный интерпретатор, который мы только что настроили, и появится PHPUnit:

введите описание изображения здесь

Запустите тесты и улыбнитесь =)

введите описание изображения здесь

Хакерский метод, особенно при создании подобных пакетов, когда вам не нужна служба, работающая так, как с сайтом, но пока, по крайней мере, ее можно использовать, и вы получаете преимущества производительности WSL2, а не серверных систем hyper-v.

Ответ №2:

Согласно ветке комментариев, среда тестирования Docker WSL PHPUnit Phpstorm в настоящее время не поддерживается.

Ответ №3:

Я нашел обходной путь.

Я только что поместил .phar файлы выполнения в /usr/local/bin/ каталог. Что я имею в виду. Я только что изменил свой Dockerfile и добавил туда

 RUN curl -L https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs 
    amp;amp; chmod  x /usr/local/bin/phpcs 
    amp;amp; curl -L https://phar.phpunit.de/phpunit-9.5.phar > /usr/local/bin/phpunit 
    amp;amp; chmod  x /usr/local/bin/phpunit 
    amp;amp; curl -L https://phpmd.org/static/latest/phpmd.phar > /usr/local/bin/phpmd 
    amp;amp; chmod  x /usr/local/bin/phpmd
  

Он загружает и перемещает файлы .phar точно в /usr/local/bin/ каталог. Это означает, что он может быть вызван в любом месте контейнера docker.

Тогда вы можете просто скопировать мою конфигурацию по скриншотам. Убедитесь, что пути совпадают.

  1. Настройки PHP fpm

введите описание изображения здесь

  1. Настройки модуля PHP

введите описание изображения здесь

Соответственно, это также работает для phpc, phpmd и т. Д. Прямо сейчас вы можете просто вызывать файлы выполнения без косых черт пример