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


96

Я намагаюся встановити 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, тому не знав би, чому він не може писати в мою домашню папку. Моя звичайна реакція на a permission denied- це використання sudo, але композитор тоді завжди каже:

Не запускайте Composer як root / суперкористувач! Див https://getcomposer.org/root подробиці

Будь-яка ідея, як я можу це вирішити?


1
Може бути очевидним, але його слід запитати ... які поточні дозволи у вас composer.json?
TheGentleman

@GentlemanMax - Ще немає ~/.composer/composer.jsonфайлу.
kramer65

Отже, які дозволи на ~/.composer/папку? kramer65не має права писати, здається, a chmodможе бути корисним.
AnthonyB

@AnthonyB - Так, зараз я бачу ~/.composer/, що належить root. Але я щойно перевірив деякі інші системи та встановив композитор на новій новій Ubuntu 16.04 VM, і він завжди належить root. Я можу, звичайно , chmodі chownце, але це ідея хороша , щоб змінити цю поведінку за замовчуванням?
kramer65

Я щойно перевірив свій Ubuntu 16.04, справді .composer належить root, з 755режимом. Тож зміна власника, мабуть, не рішення.
AnthonyB

Відповіді:


253

У мене була ця проблема з установкою laravel / lumen.

Це можна вирішити за допомогою наступної команди:

$ sudo chown -R $USER ~/.composer/

1
Це також працювало для мене під час yii2 встановлення додаткового модуля композитора для глобальних активів завдяки Samuel
Geoff

3
Використання $ USER замість 'myuser' - кращий варіант.
zennin

2
Це не вирішило проблему для мене, дивно. Будь-які інші поради?
mylord

2
@mylord Переконайтеся, що .composer - від вашого користувача. Спробуйте бігти з~/.composer
Семюелем Мартінсом

6
Це хороша порада. Однак якщо ви вже створили свій проект, запустіть sudo chown -R $ USER my_project
Даніель

16

Щоб вирішити цю проблему, слід відкрити вікно терміналу та ввести цю команду:

sudo chown -R user ~/.composeruserвашим поточним користувачем, у вашому випадку,kramer65 )

Після запуску цієї команди ви повинні мати дозвіл на запуск вашої глобальної команди композитора.

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

sudo rm -rf .composer


3

У моєму випадку я .composerналежав root, тому я це зробив, sudo rm -fr .composerі тоді мої глобальні вимоги спрацювали.

Будьте попереджені! Ви не хочете використовувати цю команду, якщо не впевнені, що робите.


3

Я також стикався з цією проблемою, але в моєму випадку я потрапив у неправильний каталог. Перевірте каталог, в якому ви працюєте


2

У моєму випадку у мене не виникає проблем з ~/.composer.
Отож, перебуваючи у кореневій папці програми Laravel, я це зробив, sudo chown -R $USER composer.lockі це було корисно.


1

Це може бути надзвичайно важливим випадком, але якщо ви використовуєте Travis CI і користуєтеся перевагами кешування, можливо, ви захочете очистити весь кеш і повторити спробу.

Виправлено мою проблему, коли я переходив від sudo до non sudo.


0

Я отримував той самий виняток, але в моєму випадку я використовую PowerShell для запуску команд. Отже, я виправив це інструкцією, щоб спочатку розблокувати кілька файлів. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File а потім використовуйте наступне, щоб завантажити пакет & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

У моєму випадку я sudo mkdir projectFolderстворював папку. Він належав користувачеві root, і я увійшов, використовуючи некорневого користувача.

Тож я змінив дозвіл на папку за допомогою команди, sudo chown mynonrootuser:mynonrootuser projectFolderі тоді вона працювала нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.