Kompozytor: file_put_contents (./ composer.json): nie udało się otworzyć strumienia: Odmowa uprawnień

98

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 deniedjest 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ć?

kramer65
źródło
1
Może to być oczywiste, ale należy je zapytać ... jakie masz obecnie uprawnienia composer.json?
TheGentleman
@GentlemanMax - Nie ma ~/.composer/composer.jsonjeszcze pliku.
kramer65,
Więc jakie są uprawnienia do ~/.composer/folderu? kramer65wydaje się, że nie ma prawa pisać, chmodmoże się przydać.
AnthonyB
@AnthonyB - Tak, teraz widzę, że ~/.composer/należy do root. 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ę chmodlub chowntak, ale czy warto zmienić to domyślne zachowanie?
kramer65
Właśnie sprawdziłem na moim Ubuntu 16.04, rzeczywiście .composer jest własnością roota, z 755trybem. Więc zmiana właściciela prawdopodobnie nie jest rozwiązaniem.
AnthonyB

Odpowiedzi:

259

Miałem ten problem, aby zainstalować laravel / lumen.

Można to rozwiązać za pomocą następującego polecenia:

$ sudo chown -R $USER ~/.composer/
Samuel Martins
źródło
1
To zadziałało również dla mnie podczas instalacji yii2 globalnej wtyczki kompozytora zasobów dzięki Samuelowi
Geoff
3
Używanie $ USER zamiast "myuser" jest lepszą opcją.
zennin
2
To nie rozwiązało problemu, dziwne. Jakieś inne wskazówki?
mylord
2
@mylord Upewnij się, że plik .composer pochodzi od użytkownika. Spróbuj uruchomić z~/.composer
Samuel Martins
6
To dobra wskazówka. Jeśli jednak utworzyłeś już swój projekt, uruchom sudo chown -R $ USER my_project
Daniel
17

Aby rozwiązać ten problem, otwórz okno terminala i wpisz to polecenie:

sudo chown -R user ~/.composer( userw twoim przypadku jako aktualny użytkownik kramer65)

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

Rozpoznać
źródło
3

W moim przypadku .composerbył własnością roota, więc zrobiłem to sudo rm -fr .composeri wtedy moje globalne wymaganie zadziałało.

Być ostrzeżonym! Nie chcesz używać tego polecenia, jeśli nie jesteś pewien, co robisz.

Nabil Kadimi
źródło
3

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

Yasin Okumuş
źródło
2

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.locki to było pomocne.

Tarasowicz
źródło
1

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.

Moak
źródło
0

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

javierfmv
źródło
0

W moim przypadku sudo mkdir projectFoldertworzył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 projectFoldera potem działało dobrze.

student wp
źródło
0

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.

Jonathan
źródło