Композитор: file_put_contents (./ composer.json): не удалось открыть поток: отказано в разрешении

48

Я пытаюсь установить Prestissimo на сервер Ubuntu 16.04, но это приводит к ошибке:

$ composer global require "hirak/prestissimo:^0.3"
Changed current directory to /home/kramer65/.composer


  [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...

Я зарегистрирован как пользователь kramer65, поэтому я не знаю, почему он не может писать в мою домашнюю папку. Моя нормальная реакция на permission denied заключается в использовании sudo, но композитор тогда всегда говорит:

Не запускайте Composer как root/super user! Подробнее см. https://getcomposer.org/root

Любая идея, как я могу это решить?

  • 0
    Может быть очевидным, но нужно спросить ... каковы текущие права на ваш composer.json ?
  • 0
    @GentlemanMax - файла ~/.composer/composer.json пока нет.
Показать ещё 6 комментариев
Теги:
composer-php
sudo

7 ответов

122
Лучший ответ

У меня была эта проблема для установки laravel/lumen.

Я могу решить с помощью следующей команды:

$ sudo chown -R $USER ~/.composer/
  • 0
    Это также работало для меня в yii2 установке плагина composer global assets
  • 1
    Использование $ USER вместо 'myuser' - лучший вариант.
Показать ещё 4 комментария
10

Чтобы решить эту проблему, вы должны открыть окно терминала и ввести следующую команду:

sudo chown -R user ~/.composer (при этом user является вашим текущим пользователем, в вашем случае kramer65)

После того, как вы запустили эту команду, у вас должно быть разрешение на запуск вашей команды global require.

Вам также может потребоваться удалить файл .composer из текущего каталога, чтобы открыть окно терминала и введите следующую команду:

sudo rm -rf .composer

1

Я тоже столкнулся с этой проблемой, но в моем случае я оказался не в том каталоге. Проверьте каталог, с которым вы работаете

0

на вашем компьютере просто введите следующую команду в каталог, где находится docker:

chown -R 1000: 1000/var/www

/var/www может измениться, если вы храните свои проекты в другой папке.

например:

chown -R 1000: 1000/home/myuser/my_projects

0

В моем случае у меня нет проблем с ~/.composer.
Поэтому, находясь в корневой папке приложения Laravel, я сделал sudo chown -R $USER composer.lock и это было полезно.

0

Это может быть суперграничный случай, но если вы используете Travis CI и используете кеширование, вы можете очистить весь кеш и повторить попытку.

Исправлена ​​проблема, когда я отправлялся из sudo в сборки non sudo.

0

В моем случае .composer принадлежал root, поэтому я сделал sudo rm -fr .composer, а затем выполнил мой глобальный запрос.

Будьте осторожны! Вы не хотите использовать эту команду, если не уверены, что делаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню