Brak uprawnień do zapisu w katalogu pub / static podczas uruchamiania bin / magento setup: upgrade

19

Dzień wcześniej zaktualizowałem nowy moduł i działał normalnie. Teraz, gdy biegnę bin/magento setup:upgrade, otrzymuję poniższy wyjątek. Próbowałem ustawić uprawnienia na 777 (lub 770) dla pubfolderu w Magento 2, ale to nie działa.

  [Wyjątek]
  Brak uprawnień do zapisu w następujących katalogach: „pub / static”

Thao Pham
źródło
czy udało ci się rozwiązać ten problem? jeśli tak, prosimy o przesłanie rozwiązania.
Reena Parekh,
Czy masz ten sam problem?
Thao Pham,
tak, mam do czynienia z tym samym problemem. jak to rozwiązałeś?
Reena Parekh,
Komentuję trochę kodu linii w rdzeniu. Chcesz zrobić jak ja?
Thao Pham,
1
zamieściłem swój relsove w poście poniżej. Mogę spróbować
Thao Pham,

Odpowiedzi:

30

Skrócony pub/staticfolder TL; DR .


Dla mnie miałem starszą instalację, która prawdopodobnie miała pewne dowiązania symboliczne i stare pliki, które już nie istnieją.

Problem checkInstallationFilePermissionspolega na tym, że sprawdza rekurencyjnie uprawnienia. Pliki i foldery. Miałem brakujące dowiązanie symboliczne, które zwróciło fałsz na czeku, jeśli można go zapisać.

Jak debugować:

  1. setup/src/Magento/Setup/Model/FilePermissions.php

  2. Idź do linii 143 w metodzie checkRecursiveDirectories

  3. Dodaj linie var_dump($subDirectory);var_dump($subDirectory->isWritable());

  4. Uruchom ponownie bin/magento setup:upgrade

teraz zobaczysz, co naprawdę jest nie tak, i możesz to naprawić. Osobiście usuwam wszystkopub/static , to będzie automatycznie generowana treść, więc nie powinieneś się tym martwić.

Michał Sk
źródło
1
Całkowicie usunąłem pub / static, po uruchomieniu Instalatora: uaktualnij jedyny folder w pub / static to __requirejs folder. Brakuje CSS, nie ma stylizacji, co tak nigdy .... Człowieku .. chciałbym tego nie zrobić
Lachezar Raychev
jak mogę przywrócić wszystko w pubie / static?
Lachezar Raychev
2
wszystko szło tak dobrze .... :) naprawdę zaczynam gardzić tym frameworkiem
Lachezar Raychev
3
Jeśli usuniesz zawartość pub / static, upewnij się, że nie usuwasz pub / static / .htaccess, ponieważ jest on częścią bazy kodu i nie można go odtworzyć: github.com/magento/magento2/tree/2.0/ pub / static
mttjohnson
Perfecto! To było to ...
Arvind07,
11

Wystąpił ten błąd podczas programowania z powodu przerwanego łącza symbolicznego.

Utworzyłem plik w view/frontend/webkatalogu modułu, który w developertrybie został wdrożony do pub/statickatalogu za pomocą dowiązania symbolicznego wskazującego katalog modułu, w którym przechowywany jest oryginalny plik.

W pewnym momencie programowania usunąłem ten plik z modułu, ale nadal istniało łącze symboliczne pub/staticwskazujące na plik, który już nie istniał. Spodziewam się, że tak też by było w przypadku zmiany nazwy jednego z plików.

Jeśli witryna jest w productiontrybie i została bin/magento setup:static-content:deployuruchomiona, faktycznie kopiuje pliki do pub/statickatalogu zamiast tworzyć łącza symboliczne.

Aby znaleźć ten zerwany symboliczny link, uruchomiłem polecenie z powłoki

find -L . -type l

Usunięcie zepsutego dowiązania symbolicznego rozwiązało problem (na przykład za pomocą find -L . -type l -exec rm {} \;).

mttjohnson
źródło
To była także odpowiedź na mój problem, dzięki mttjohnson!
Joshua Soileau
4

W swoim katalogu głównym Magento uruchom poniższe polecenia i twój problem powinien zniknąć:

$ rm -rf pub/static/*
$ php bin/magento setup:static-content:deploy

Pracował dla mnie.

medyna
źródło
Spowoduje to również usunięcie .htaccesspliku. Potrzebujesz .htaccesspliku.
Adarsh ​​Khatri
2

Należy skonfigurować uprawnienia zgodnie z opisem w oficjalnej dokumentacji: http://devdocs.magento.com/guides/v2.0/install-gde/install/file-system-perms.html

Mage2.PRO
źródło
1
czy rzeczywiste uprawnienia mogą tylko powodować zmiany adresu URL w przypadku?
rob3000,
Próbuję ponownie, ale to nie działa
Thao Pham,
Nie zapomnij zrobić tego rekurencyjnie w podkatalogach: pub, pub / static itp.
Mage2.PRO,
własność jest równie ważna jak uprawnienia; sprawdź powyższy link, a także devdocs.magento.com/guides/v2.0/install-gde/prereq/… . Musisz mieć dwóch użytkowników; użytkownik lokalny i użytkownik serwera WWW
Steve Johnson
cały pomysł ustawiania uprawnień na poziomie aplikacji jest błędny, więc myślę, że ludzie powinni unikać dokumentacji w tej sekcji. zostanie zaktualizowany w następnych wersjach zgodnie z ich problemami z github
Claudiu Creanga
1

To jest mój rozwiązany tymczasowy. Komentuję linię 744 i 466 w <magento_dir>/setup/src/Magento/Setup/Model/Installer.php.

To jest kod linii:

$this->checkInstallationFilePermissions();

Potrzebuję rozwiązania nie zmieniającego pliku podstawowego.

Thao Pham
źródło
Problem prawdopodobnie wynika z zepsutego dowiązania symbolicznego (odpowiedź poniżej) w katalogu pub / static. Usunięcie zepsutego dowiązania symbolicznego powinno rozwiązać problem bez modyfikowania podstawowych plików.
mttjohnson
newtips.co/magento/questions/91184/… To zadziała
Envision Ecommerce
@EnvisionEcommerce link nie działa.
MagePsycho
1

Naprawiono odmowę uprawnień bin / magento

chmod u + x bin / magento

Gentzy
źródło
0

Miałem ten sam problem, że nie mogłem zainstalować Magento za pomocą wiersza poleceń. Po prostu utworzenie folderu pub/staticrozwiązało problem.

Quinten
źródło
0

Jeśli ktoś ma ten problem w systemie Windows. Wystarczy wykonać polecenie w wierszu polecenia administratora, a będzie działać jak urok. Mam nadzieję, że to komuś pomoże.

Lakshin Karunaratne
źródło
0

W moim przypadku błąd spowodował uruchomienie polecenia aktualizacji przez użytkownika innego niż root lub użytkownika z ograniczonymi uprawnieniami. Upewnij się, że uruchomiłeś polecenie aktualizacji z użytkownikiem z wystarczającymi uprawnieniami.

Arvind07
źródło
0

Wielokrotnie weryfikowałem uprawnienia do zapisu i wszystko było dobrze.

  1. Skomentowałem ten wiersz, który rzuca mi wyjątek.
  2. Potem uruchomiłem setup: upgrade.
  3. Cofnął wiersz z wyjątkiem
  4. Problem nie był już odtwarzany
zhartaunik
źródło
0

Uruchom następujące polecenie dla następujących trzech adresów IP:

<Magento-Directory>php bin\magento maintenance:allow-ips 127.0.0.1, 
<Magento-Directory>php bin\magento maintenance:allow-ips "the ip of my localhost given by the NAT-Router" and
<Magento-Directory>php bin\magento maintenance:allow-ips  "the ip of the NAT-Router" 
Berega
źródło
0

nie używaj tego:

rm -r pub/static

usunie wszystkie pliki, nawet .htaccess

możesz użyć tego będzie lepiej:

rm -rf pub/static/frontend
rm -rf pub/static/adminhtml

po tym użyciu:

php bin/magento setup:static-content:deploy en_US -f 
Aqeel Hussein
źródło
-1

po prostu usuń folder pub / static z magento2

rm -r pub/static

następnie wdróż statyczną zawartość magento2

php bin/magento setup:static-content:deploy

dzięki temu procesowi rozwiązałem ten sam problem.

Abhishek
źródło
4
Nie należy usuwać całego katalogu pub / static, ponieważ zawiera on ważny plik .htaccess, a plik .htaccess nie zostanie odtworzony przy żadnym wdrożeniu zawartości statycznej. Możesz uruchomić rm -r pub/static/*i to powinno unikać usuwania pliku .htaccess.
mttjohnson