Compositor: file_put_contents (./ composer.json): falha ao abrir o stream: permissão negada


98

Estou tentando instalar o Prestissimo em um servidor Ubuntu 16.04, mas ocorre um erro:

$ 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>]...

Estou conectado como usuário kramer65, então não sei por que não consigo gravar na minha pasta de início. Minha reação normal a um permission deniedé usar sudo, mas o compositor sempre diz:

Não execute o Composer como root / superusuário! Consulte https://getcomposer.org/root para obter detalhes

Alguma ideia de como posso resolver isso?


1
Pode ser óbvio, mas deve ser perguntado ... quais são as permissões atuais no seu composer.json?
TheGentleman

@GentlemanMax - Não há nenhum ~/.composer/composer.jsonarquivo ainda.
Kramer65

Então, quais são as permissões na ~/.composer/pasta? kramer65não tem o direito de escrever, parece, um chmodpoderia ser útil.
AnthonyB

@AnthonyB - Sim, agora vejo que ~/.composer/é propriedade de root. Mas acabei de verificar alguns outros sistemas e instalei o composer em uma nova VM do Ubuntu 16.04, e ela sempre pertence a root. Eu não posso de curso chmodou chownisso, mas é uma boa idéia para mudar esse comportamento padrão?
Kramer65

Acabei de verificar no meu Ubuntu 16.04, na verdade .composer é propriedade do root, com o 755modo. Portanto, mudar de proprietário provavelmente não é a solução.
AnthonyB

Respostas:


259

Tive esse problema para instalar o laravel / lumen.

Isso pode ser resolvido com o seguinte comando:

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

1
Isso também funcionou para mim na instalação do yii2 do plugin composer global asset, obrigado samuel
Geoff

3
Usar $ USER em vez de 'myuser' é a melhor opção.
zennin

2
Isso não resolveu o problema para mim, estranho. Alguma outra dica?
mylord,

2
@mylord Certifique-se de que o .composer é do seu usuário. Tente correr com~/.composer
Samuel Martins

6
Essa é uma boa dica. No entanto, se você já criou seu projeto, execute sudo chown -R $ USER my_project
Daniel

17

Para resolver isso, você deve abrir uma janela de terminal e digitar este comando:

sudo chown -R user ~/.composer( usersendo seu usuário atual, no seu caso kramer65)

Depois de executar este comando, você deve ter permissão para executar o comando requerer global do composer.

Você também pode precisar remover o arquivo .composer do diretório atual, para fazer isso, abra uma janela de terminal e digite este comando:

sudo rm -rf .composer


3

No meu caso, .composerera propriedade do root, então eu fiz sudo rm -fr .composere meu requerimento global funcionou.

Esteja avisado! Você não quer usar esse comando se não tiver certeza do que está fazendo.


3

Eu também enfrentei esse problema, mas, no meu caso, estava no diretório errado. Verifique o diretório em que está trabalhando


2

No meu caso, não tenho problemas com ~/.composer.
Então, estando dentro da pasta raiz do aplicativo Laravel, eu fiz sudo chown -R $USER composer.locke foi útil.


1

Este pode ser um caso extremamente extremo, mas se você estiver usando o Travis CI e aproveitando o armazenamento em cache, convém limpar todo o cache e tentar novamente.

Corrigido meu problema quando eu estava indo de compilações sudo para não sudo.


0

Eu estava recebendo a mesma exceção, mas no meu caso estou usando o PowerShell para executar comandos. Portanto, corrigi isso com uma instrução para desbloquear vários arquivos primeiro. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File e use o seguinte para carregar o pacote & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

No meu caso costumava sudo mkdir projectFoldercriar pasta. Era propriedade do usuário root e eu estava logado usando um usuário não root.

Então, mudei a permissão da pasta usando o comando sudo chown mynonrootuser:mynonrootuser projectFoldere funcionou bem.


0

Para mim, no Ubuntu 18.04. Eu precisava comer por dentro~/.config/composer/

Por exemplo

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

Então os comandos globais funcionam.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.