Compositor: file_put_contents (./ composer.json): no se pudo abrir la transmisión: permiso denegado

96

Estoy tratando de instalar Prestissimo en un servidor Ubuntu 16.04, pero eso genera un error:

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

He iniciado sesión como usuario kramer65, por lo que no sabría por qué no puede escribir en mi carpeta de inicio. Mi reacción normal a a permission deniedes usar sudo, pero el compositor siempre dice:

¡No ejecute Composer como root / superusuario! Consulte https://getcomposer.org/root para obtener más detalles

¿Alguna idea de cómo puedo solucionar esto?

kramer65
fuente
1
Puede ser obvio, pero debe preguntarse ... ¿cuáles son los permisos actuales en su composer.json?
TheGentleman
@GentlemanMax: ~/.composer/composer.jsonaún no hay archivo.
kramer65
Entonces, ¿cuáles son los permisos en la ~/.composer/carpeta? kramer65no tiene derecho a escribir, parece, chmodpodría ser útil.
AnthonyB
@AnthonyB - Sí, ahora veo que ~/.composer/es propiedad de root. Pero acabo de verificar algunos otros sistemas e instalé Composer en una nueva máquina virtual Ubuntu 16.04 nueva, y siempre es propiedad de root. Me puede, por supuesto chmod, o chownella, pero es una buena idea para cambiar este comportamiento por defecto?
kramer65
Acabo de verificar mi Ubuntu 16.04, de hecho .composer es propiedad de root, con 755modo. Así que cambiar de propietario probablemente no sea la solución.
AnthonyB

Respuestas:

253

Tuve este problema para instalar laravel / lumen.

Se puede resolver con el siguiente comando:

$ sudo chown -R $USER ~/.composer/
Samuel Martins
fuente
1
Esto también funcionó para mí en la instalación yii2 del complemento de activos globales del compositor gracias samuel
Geoff
3
Usar $ USER en lugar de 'myuser' es una mejor opción.
zennin
2
No me solucionó el problema, extraño. ¿Algún otro consejo?
milord
2
@mylord Asegúrese de que el .composer sea de su usuario. Prueba a correr con~/.composer
Samuel Martins
6
Este es un buen consejo. Sin embargo, si ya ha creado su proyecto, ejecute sudo chown -R $ USER my_project
Daniel
16

Para resolver esto, debe abrir una ventana de terminal y escribir este comando:

sudo chown -R user ~/.composer( usersiendo su usuario actual, en su caso, kramer65)

Una vez que haya ejecutado este comando, debe tener permiso para ejecutar su comando composer global require.

También es posible que deba eliminar el archivo .composer del directorio actual, para hacer esto, abra una ventana de terminal y escriba este comando:

sudo rm -rf .composer

Conocido
fuente
3

En mi caso, .composerera propiedad de root, así que lo hice sudo rm -fr .composery luego funcionó mi requerimiento global.

¡Tenga cuidado! No desea utilizar ese comando si no está seguro de lo que está haciendo.

Nabil Kadimi
fuente
3

También enfrenté este problema, pero en mi caso, estaba en el directorio incorrecto. Consulta el directorio en el que estás trabajando

Yasin Okumuş
fuente
2

En mi caso, no tengo problemas con ~/.composer.
Así que al estar dentro de la carpeta raíz de la aplicación Laravel, lo hice sudo chown -R $USER composer.locky fue útil.

Tarasovych
fuente
1

Este podría ser un caso muy avanzado, pero si está utilizando Travis CI y aprovecha el almacenamiento en caché, es posible que desee borrar todo el caché y volver a intentarlo.

Se solucionó mi problema cuando pasaba de compilaciones sudo a compilaciones no sudo.

Moak
fuente
0

Obtuve la misma excepción, pero en mi caso estoy usando PowerShell para ejecutar comandos. Entonces, arreglé esto con una instrucción para desbloquear varios archivos primero. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File y luego use lo siguiente para cargar el paquete & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package

javierfmv
fuente
0

En mi caso solía sudo mkdir projectFoldercrear carpeta. Era propiedad de un usuario root y yo había iniciado sesión con un usuario que no era root.

Así que cambié el permiso de la carpeta usando el comando sudo chown mynonrootuser:mynonrootuser projectFoldery luego funcionó bien.

estudiante de wp
fuente