Compositor: file_put_contents(./composer.json): no se pudo abrir la secuencia: Permiso denegado

4 minutos de lectura

estoy tratando de instalar Prestissimo a 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>]...

Estoy logueado como usuario kramer65, por lo que no sabría por qué no puede escribir en mi carpeta de inicio. Mi reacción normal a un permission denied es usar sudopero el compositor siempre dice:

¡No ejecute Composer como root/superusuario! Ver https://getcomposer.org/root para detalles

¿Alguna idea de cómo puedo solucionar esto?

  • Puede ser obvio, pero debe preguntarse… ¿cuáles son los permisos actuales en su composer.json?

    – El caballero

    18 dic 2016 a las 20:09

  • @GentlemanMax – No hay ~/.composer/composer.json archivo todavía.

    – kramer65

    18 dic 2016 a las 20:11

  • Entonces, ¿cuáles son los permisos en ~/.composer/ ¿carpeta? kramer65 no tiene derecho a escribir parece, un chmod Podría ser útil.

    – AnthonyB

    18 dic 2016 a las 20:13

  • @AnthonyB – Sí, ahora veo ~/.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. por supuesto que puedo chmod o chown pero, ¿es una buena idea cambiar este comportamiento predeterminado?

    – kramer65

    18 dic 2016 a las 20:20

  • No totalmente relacionado, pero no instalaría Prestissimo en un servidor de producción. Su compatibilidad con las versiones más nuevas de Composer puede requerir actualizaciones con las que probablemente no quiera lidiar en producción.

    – Dwight

    18 de diciembre de 2016 a las 23:29

avatar de usuario
samuel martins

Tuve este problema para instalar laravel/lumen.

Se puede resolver con el siguiente comando:

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

  • Esto también funcionó para mí en la instalación de yii2 del complemento de activos globales del compositor gracias samuel

    – Geoff

    15 de abril de 2017 a las 13:01

  • Usar $USER en lugar de ‘myuser’ es una mejor opción.

    – zenin

    4 de agosto de 2017 a las 11:20

  • No solucionó el problema para mí, extraño. ¿Algún otro consejo?

    – mi señor

    20 de octubre de 2017 a las 3:57

  • @mylord Asegúrese de que el .composer sea de su usuario. Intenta correr con ~/.composer

    – Samuel Martín

    24 de octubre de 2017 a las 14:03

  • Este es un buen consejo. Sin embargo, si ya ha creado su proyecto, ejecute sudo chown -R $USER my_project

    – Daniel

    6 de marzo de 2018 a las 10:59


avatar de usuario
Conocido

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

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

Después de ejecutar este comando, debe tener permiso para ejecutar su comando composer global require.

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

sudo rm -rf .composer

Para mí, en Ubuntu 18.04. Necesitaba comer por dentro ~/.config/composer/

P.ej

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

Entonces funcionan los comandos globales.

En mi caso no tengo problemas con ~/.composer.
Entonces, estando dentro de la carpeta raíz de la aplicación Laravel, lo hice sudo chown -R $USER composer.lock y fue útil.

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

¡Cuidado! No querrás usar ese comando si no estás seguro de lo que estás haciendo.

También enfrenté este problema, pero en mi caso, estaba en el directorio equivocado. Verifique el directorio en el que está trabajando

avatar de usuario
jason

En mi caso, todos los permisos eran correctos en todas las ubicaciones mencionadas en otras respuestas aquí, pero aún recibía este error.

Resultó que había algunos directorios de proveedores que eran propiedad de root. el compositor escribe composer.lock archivos por todo el lugar cuando está haciendo una actualización o instalación.

Entonces, resolviendo mi caso, y esto es específicamente para un contenedor de vela laravel, todas las propiedades se cambiaron al usuario sail en el proyecto:

Introducir el sail contenedor como raíz:

vendor/bin/sail root-shell

Establezca la propiedad del archivo para todos los archivos del proyecto:

chown -R sail:sail /var/www/html

Es posible que desee hacer el directorio de proveedores solo como un primer intento:

chown -R sail:sail /var/www/html/vendor

La propiedad estaba equivocada después de cambiar de un laminado a mano docker-compose.yaml configuración para Laravel Sail, que IMO maneja la propiedad y los permisos de archivos de una manera sensata, separando root del usuario de la aplicación sail.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad