Komposer: file_put_contents (./ composer.json): gagal membuka aliran: Izin ditolak

96

Saya mencoba menginstal Prestissimo ke server Ubuntu 16.04, tetapi itu menyebabkan kesalahan:

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

Saya masuk sebagai pengguna kramer65, jadi saya tidak tahu mengapa itu tidak dapat menulis ke folder rumah saya. Reaksi normal saya terhadap a permission deniedadalah menggunakan sudo, tetapi komposer selalu berkata:

Jangan menjalankan Composer sebagai root / super user! Lihat https://getcomposer.org/root untuk detailnya

Ada ide bagaimana saya bisa mengatasi ini?

kramer65
sumber
1
Mungkin sudah jelas, tetapi harus ditanya ... apa izin saat ini pada Anda composer.json?
TheGentleman
@GentlemanMax - Belum ada ~/.composer/composer.jsonfile.
kramer65
Jadi apa saja hak akses pada ~/.composer/folder? kramer65Sepertinya tidak punya hak untuk menulis, chmodbisa bermanfaat.
AnthonyB
@AnthonyB - Ya, sekarang saya lihat ~/.composer/dimiliki oleh root. Tetapi saya baru saja memeriksa beberapa sistem lain dan menginstal komposer pada Ubuntu 16.04 VM baru yang segar, dan itu selalu dimiliki oleh root. Tentu saja saya bisa chmodatau chownitu, tetapi apakah itu ide yang baik untuk mengubah perilaku default ini?
kramer65
Saya baru saja memeriksa Ubuntu 16.04 saya, memang .composer dimiliki oleh root, dengan 755mode. Jadi, ganti pemilik mungkin bukanlah solusi.
AnthonyB

Jawaban:

253

Saya mengalami masalah ini untuk menginstal laravel / lumen.

Ini dapat diatasi dengan perintah berikut:

$ sudo chown -R $USER ~/.composer/
Samuel Martins
sumber
1
Ini juga berfungsi untuk saya dalam pemasangan yii2 plugin aset global komposer terima kasih samuel
Geoff
3
Menggunakan $ USER daripada 'myuser' adalah opsi yang lebih baik.
zennin
2
Itu tidak memperbaiki masalah bagi saya, aneh. Ada tips lain?
Tuanku
2
@mylord Pastikan bahwa .composer dari pengguna Anda. Coba jalankan dengan~/.composer
Samuel Martins
6
Ini tip yang bagus. Namun jika Anda telah membuat proyek Anda, jalankan sudo chown -R $ USER my_project
Daniel
16

Untuk mengatasi ini, Anda harus membuka jendela terminal dan mengetik perintah ini:

sudo chown -R user ~/.composer(dengan usermenjadi pengguna Anda saat ini, dalam kasus Anda, kramer65)

Setelah Anda menjalankan perintah ini, Anda harus memiliki izin untuk menjalankan perintah komposer global Anda.

Anda mungkin juga perlu menghapus file .composer dari direktori saat ini, untuk melakukan ini buka jendela terminal dan ketik perintah ini:

sudo rm -rf .composer

Ken
sumber
3

Dalam kasus saya, .composerdimiliki oleh root, jadi saya melakukannya sudo rm -fr .composerdan kemudian kebutuhan global saya berhasil.

Berhati-hatilah! Anda tidak ingin menggunakan perintah itu jika Anda tidak yakin apa yang Anda lakukan.

Nabil Kadimi
sumber
3

Saya menghadapi masalah ini juga tetapi dalam kasus saya, saya berada di direktori yang salah. Periksa direktori tempat Anda bekerja

Yasin Okumuş
sumber
2

Dalam kasus saya, saya tidak memiliki masalah dengan ~/.composer.
Jadi berada di dalam folder root aplikasi Laravel, saya melakukannya sudo chown -R $USER composer.lockdan itu sangat membantu.

Tarasovych
sumber
1

Ini mungkin kasus super edge, tetapi jika Anda menggunakan Travis CI dan memanfaatkan caching, Anda mungkin ingin menghapus semua cache dan mencoba lagi.

Memperbaiki masalah saya ketika saya beralih dari sudo ke non sudo build.

Moak
sumber
0

Saya mendapatkan pengecualian yang sama, tetapi dalam kasus saya, saya menggunakan PowerShell untuk menjalankan perintah Jadi, saya memperbaikinya dengan instruksi untuk membuka blokir beberapa file terlebih dahulu. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File dan kemudian gunakan yang berikut ini untuk memuat paket & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package

javierfmv.dll
sumber
0

Dalam kasus saya, saya biasa sudo mkdir projectFoldermembuat folder. Itu dimiliki oleh pengguna root dan saya masuk menggunakan pengguna non-root.

Jadi saya mengubah izin folder menggunakan perintah sudo chown mynonrootuser:mynonrootuser projectFolderdan kemudian berfungsi dengan baik.

wp mahasiswa
sumber