Próbuję zainstalować Prestissimo na serwerze Ubuntu 16.04, ale prowadzi to do błędu:
$ 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>]...
Jestem zalogowany jako użytkownik kramer65
, więc nie wiedziałbym, dlaczego nie może pisać w moim folderze domowym. Moją normalną reakcją na a permission denied
jest użycie sudo
, ale wtedy kompozytor zawsze mówi:
Nie uruchamiaj Composera jako użytkownik root / super! Szczegółowe informacje można znaleźć pod adresem https://getcomposer.org/root
Masz jakiś pomysł, jak mogę to rozwiązać?
composer.json
?~/.composer/composer.json
jeszcze pliku.~/.composer/
folderu?kramer65
wydaje się, że nie ma prawa pisać,chmod
może się przydać.~/.composer/
należy doroot
. Ale właśnie sprawdziłem kilka innych systemów i zainstalowałem narzędzie Composer na nowej, nowej maszynie wirtualnej Ubuntu 16.04 i zawsze jest własnościąroot
. Oczywiście mogęchmod
lubchown
tak, ale czy warto zmienić to domyślne zachowanie?755
trybem. Więc zmiana właściciela prawdopodobnie nie jest rozwiązaniem.Odpowiedzi:
Miałem ten problem, aby zainstalować laravel / lumen.
Można to rozwiązać za pomocą następującego polecenia:
$ sudo chown -R $USER ~/.composer/
źródło
~/.composer
Aby rozwiązać ten problem, otwórz okno terminala i wpisz to polecenie:
sudo chown -R user ~/.composer
(user
w twoim przypadku jako aktualny użytkownikkramer65
)Po uruchomieniu tego polecenia powinieneś mieć uprawnienia do uruchamiania polecenia globalnego wymagania kompozytora.
Może być również konieczne usunięcie pliku .composer z bieżącego katalogu, aby to zrobić, otwórz okno terminala i wpisz następujące polecenie:
sudo rm -rf .composer
źródło
W moim przypadku
.composer
był własnością roota, więc zrobiłem tosudo rm -fr .composer
i wtedy moje globalne wymaganie zadziałało.Być ostrzeżonym! Nie chcesz używać tego polecenia, jeśli nie jesteś pewien, co robisz.
źródło
Miałem również do czynienia z tym problemem, ale w moim przypadku byłem w złym katalogu. Sprawdź katalog, w którym pracujesz
źródło
W moim przypadku nie mam problemów z
~/.composer
.Więc będąc w głównym folderze aplikacji Laravel, zrobiłem
sudo chown -R $USER composer.lock
i to było pomocne.źródło
Może to być przypadek super edge, ale jeśli używasz Travis CI i korzystasz z buforowania, możesz wyczyścić całą pamięć podręczną i spróbować ponownie.
Naprawiono mój problem, gdy przechodziłem z wersji sudo do wersji innych niż sudo.
źródło
Otrzymałem ten sam wyjątek, ale w moim przypadku używam programu PowerShell do uruchamiania poleceń. Naprawiłem to za pomocą instrukcji, aby najpierw odblokować wiele plików.
PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File
a następnie użyj następujących poleceń, aby załadować pakiet& 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package
źródło
W moim przypadku
sudo mkdir projectFolder
tworzyłem folder. Należał do użytkownika root i zalogowałem się jako użytkownik inny niż root.Więc zmieniłem uprawnienia do folderu za pomocą polecenia,
sudo chown mynonrootuser:mynonrootuser projectFolder
a potem działało dobrze.źródło
Dla mnie w Ubuntu 18.04. Musiałem pogrzebać w środku
~/.config/composer/
Na przykład
sudo chown -R $USER ~/.config/composer
Wtedy działają polecenia globalne.
źródło