Composer: file_put_contents (./ composer.json): akış açılamadı: İzin reddedildi


96

Prestissimo'yu bir Ubuntu 16.04 sunucusuna kurmaya çalışıyorum , ancak bu bir hataya neden oluyor:

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

Kullanıcı olarak giriş yaptım kramer65, bu yüzden neden ana klasörüme yazamadığını bilmiyorum. A'ya normal tepkim permission deniedkullanmaktır sudo, ancak besteci her zaman şöyle der:

Composer'ı kök / süper kullanıcı olarak çalıştırmayın! Ayrıntılar için https://getcomposer.org/root adresine bakın

Bunu nasıl çözebileceğime dair bir fikrin var mı?


1
Açık olabilir, ancak sorulmalıdır ... sizin için geçerli izinler composer.jsonnelerdir?
TheGentleman

@GentlemanMax - Henüz ~/.composer/composer.jsondosya yok.
kramer65

Peki ~/.composer/klasördeki izinler nelerdir? kramer65yazma hakkı yok gibi görünüyor, bir chmodfaydalı olabilir.
AnthonyB

@AnthonyB - Evet, şimdi ~/.composer/sahibi olduğunu görüyorum root. Ancak bazı diğer sistemleri kontrol ettim ve yeni bir Ubuntu 16.04 VM'ye besteci yükledim ve her zaman sahibi root. Tabii can chmodya chownda, ancak bu varsayılan davranışı değiştirmek için iyi bir fikirdir?
kramer65

Ubuntu 16.04'ümü az önce kontrol ettim, aslında .composer 755modu ile root'a ait . Dolayısıyla, sahibini değiştirmek muhtemelen çözüm değildir.
AnthonyB

Yanıtlar:


253

Laravel / lümen kurmak için bu problemi yaşadım.

Aşağıdaki komutla çözülebilir:

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

1
Bu, composer global varlık eklentisinin yii2 kurulumunda da benim için çalıştı, teşekkürler samuel
Geoff

3
'Myuser' yerine $ USER kullanmak daha iyi bir seçenektir.
zennin

2
Benim için sorunu çözmedi, garip. Başka ipucu var mı?
mylord

2
@mylord .composer'ın kullanıcınızdan geldiğinden emin olun. Birlikte koşmayı deneyin~/.composer
Samuel Martins

6
Bu iyi bir ipucu. Bununla birlikte, projenizi zaten oluşturduysanız, sudo chown -R $ USER my_project
Daniel

16

Bunu çözmek için bir terminal penceresi açmalı ve şu komutu yazmalısınız:

sudo chown -R user ~/.composer( usersizin durumunuzda mevcut kullanıcınız olarak kramer65)

Bu komutu çalıştırdıktan sonra, composer global require komutunu çalıştırma iznine sahip olmanız gerekir.

Ayrıca .composer dosyasını mevcut dizinden kaldırmanız gerekebilir, bunu yapmak için bir terminal penceresi açın ve şu komutu yazın:

sudo rm -rf .composer


3

Benim durumumda, .composerkök sahibiydi, bu yüzden yaptım sudo rm -fr .composerve sonra küresel ihtiyacım işe yaradı.

Dikkatli olun! Ne yaptığından emin değilsen bu komutu kullanmak istemezsin.


3

Ben de bu sorunla karşılaştım ama benim durumumda yanlış dizindeydim. Çalıştığınız dizini kontrol edin


2

Benim durumumda sorunum yok ~/.composer.
Laravel uygulamasının kök klasörünün içinde olmak, yaptım sudo chown -R $USER composer.lockve yardımcı oldu.


1

Bu süper uç durum olabilir, ancak Travis CI kullanıyorsanız ve önbelleğe alma avantajından yararlanıyorsanız, tüm önbelleği temizleyip yeniden denemek isteyebilirsiniz.

Sudo'dan sudo olmayan yapılara geçerken sorunum çözüldü.


0

Aynı istisnayı alıyordum, ancak benim durumumda komutları çalıştırmak için PowerShell kullanıyorum Bu yüzden, bunu önce birden fazla dosyanın engelini kaldırmak için bir talimatla düzelttim. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File ve sonra paketi yüklemek için aşağıdakileri kullanın & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

Benim durumumda sudo mkdir projectFolderklasör oluşturuyordum. Root kullanıcısına aitti ve root olmayan bir kullanıcı kullanarak oturum açtım.

Bu yüzden komut kullanarak klasör iznini değiştirdim sudo chown mynonrootuser:mynonrootuser projectFolderve sonra iyi çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.