file_put_contents(/root/.composer/кэш/репозиторий/https—flex.symfony.com/): не удалось открыть поток: ошибка каталога

#docker #symfony #composer-php #symfony-flex

Вопрос:

Я создаю свое приложение symfony 4 с помощью composer, устанавливаемого в контейнер docker.

Версия композитора 1.10.19

Но я понял эту ошибку.

[Исключение ErrorException] входные данные файла(/root/.composer/кэш/репо/https—flex.symfony.com/): не удалось открыть поток: Является каталогом

Если я запущу composer, установите еще 1 раз без перерыва, сборка будет выполнена успешно.

Если я удалю поставщика и каталог var/кэша в каталоге проекта, снова возникнет ошибка.

Я попробовал эти методы:

  • команда запуска ‘composer clearcache’ не удалась
  • Удалить каталог ~/.composer не удалось
  • chmod -R 777 ~/.композитор не добился успеха

Выполняется некоторая сборка одного и того же проекта внутри другого контейнера. Мой контейнер начинается с этого тома:

  • каталог проектов
  • ~/.каталог ssh

Я ищу по сети, но не нашел решения. Пожалуйста, помогите.

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

1. rm -rf /root/.composer/кэш/репо/https—flex.symfony.com amp;amp; touch /root/.composer/кэш/репо/https—flex.symfony.com работал, но есть ли какое-либо другое решение

2. Я надеюсь, что решение отличается от обновления композитора. Потому что symfony выдает недостаточно ошибок памяти, и я не могу увеличить этот лимит памяти.

3. разве вы не можете увеличить его с помощью COMPOSER_MEMORY_LIMIT=-1 composer update ?

4. Сделайте так, чтобы ваш композитор устанавливался без кэша : composer install --no-cache ... Или, если вы сможете обновить flex, это решит проблему в соответствии с создателем Symfony : github.com/symfony/flex/issues/780

Ответ №1:

Это была ошибка в версии Flex

В последней версии (как я пишу 1.13.4) проблема решена.

Проблема заключалась в:

Запись в кэш с пустым ключом завершится ошибкой «не удалось открыть поток: это каталог», поэтому не пытайтесь это сделать.

Мы заметили это, когда cloudflare — или серверная служба — ответили заголовком «последнее изменение» для наших серверов клиентских служб (AWS), но не для нашей локальной системы. Это вызвало выполнение условия, и он пытается написать файл кэша без имени файла.

Эта проблема была решена с помощью фиксации d81196c3f3b5

Изменить: как опубликовано @Tmb, необходимо использовать обходной путь: composer install --no-cache ...

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

1. была та же проблема, очистка кэша композитора сработала для меня.