Problem IIS z Drupal - Menedżer aktualizacji: Aktualizacja nie powiodła się! Katalogi są zablokowane przez php-cgi.exe

9

Mam problem z użyciem „Menedżera aktualizacji” w GUI. Niektóre katalogi są blokowane przez php-cgi.exe, a tym samym zastępowanie oryginalnych katalogów nowymi pobranymi (nowszymi) nie kończy się powodzeniem.
Muszę jednak wspomnieć, że to nie jest kwestia zgody, ponieważ moduły mogą instalowane poprzez „Install z URL” na /admin/modules/installi działać bez problemu.

Weźmy przykład:

  1. Strona dostępnych aktualizacji ( /admin/reports/updates/update):

    Dostępne aktualizacje

    Teraz sprawdzam Wybierz (lub inny) moduł do aktualizacji ( nie ma znaczenia, który moduł wybiorę , wyniki są takie same !! więc to tylko przykład).

  2. Nacisnąłem przycisk „Pobierz te aktualizacje” .

  3. OK, zaktualizowana instancja modułu jest pobierana bez problemu:
    Aktualizacje pobrane pomyślnie ”: Aktualizacje pobrane pomyślnie
  4. Teraz klikam Kontynuuj .
  5. Nadchodzi błąd. Wynik:
    Aktualizacja nie powiodła się. Aby uzyskać więcej informacji, zobacz dziennik poniżej.
    Wybierz_lub_inne
    • Błąd instalacji / aktualizacji
    • Przesyłanie pliku nie powiodło się, powód: Nie można skopiować D:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txtdo /Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt. Aktualizacja nieudana!
  6. OK, zaczynam próbować sprawdzić możliwe przyczyny.
    • Oto co moje Drupal wygląda struktura katalogów jak: Struktura katalogów TC. Ustawiłem ../tmpna katalog tymczasowy ( /admin/config/media/file-systemwewnątrz), pliki Drupala są htdocs. Jest to poprawne, ponieważ mogę instalować moduły za pomocą GUI, jak wspomniałem powyżej.
    • Kiedy próbuję wejść do htdocs/sites/all/modules/select_or_otherkatalogu, nie mogę, ponieważ pojawia się komunikat „Odmowa dostępu do pliku ......sites/all/modules/select_or_other!” po otwarciu w Total Commander, a ...sites/all/modules/select_or_othernie jest dostępny Odmowa dostępu.” podczas otwierania w Eksploratorze Windows: próba otwarcia katalogu w Total Commander,próba otwarcia katalogu w Eksploratorze Windows
    • OK, klikam folder prawym przyciskiem myszy i otwieram Unlocker za pośrednictwem jego asystenta w menu kontekstowym. Mówi, że ten katalog jest zablokowany przez php-cgi.exe: Unlocker - katalog zablokowany przez php-cgi.exe Klikam „Odblokuj wszystko”, a folder może teraz zostać usunięty (ponieważ nie jest już blokowany przez php-cgi.exe), więc po prostu
    • Zaktualizowany katalog modułu select_or_other mogę znaleźć w tmp: zaktualizowałem katalog modułu w <code> tmp </code>
    • więc muszę ręcznie przenieść go do sites/all/moduleskatalogu.

Jakie mogą być przyczyny blokady katalogu php-cgi.exe? (Może Windows Cache Extension 1.1 for PHP 5.3 jest zainstalowany za pomocą Instalatora platformy internetowej? Ale jeśli tak, dlaczego na przykład usunięcie obrazów lub podobnych za pomocą GUI działa poprawnie?)
Co mogę zrobić, aby uniknąć tego problemu i pozwolić „Aktualizować praca menedżera?

Sk8erPeter
źródło
Widzę dokładnie to samo zachowanie z Drupal 7.15 na IIS7 / 2008R2. Byłoby wspaniale to naprawić.
Nic
@Nic: Zgadzam się! :)
Sk8erPeter
Widziałem to sporadycznie. Czy z ciekawości odblokowuje się także odświeżanie puli aplikacji?
Brent,
2
Wiem, że to nie na temat, ale muszę to powiedzieć - uciekaj przed Drupalem na IIS. Jak widzę na zrzutach ekranu, możesz używać go do rozwoju lokalnego. Sprawdź WAMP lub Acquia Dev Desktop . Jeśli musisz po prostu użyć go na serwerze produkcyjnym, zignoruj ​​mój komentarz :) Muszę używać IIS dla niektórych witryn i jak dotąd nie było to dobre doświadczenie.
Aram Boyajyan,
@Brent: Nie wiem. Po uruchomieniu strony w Drupal, pliki i katalogi wydają się być zablokowane na nieznany okres. Nawiasem mówiąc, używam również Drusha , a kiedy chcę zaktualizować moduł przy użyciu drush up -y, mam ten sam problem: muszę odblokować te pliki i katalogi za pomocą Unlockera, aby działało, w przeciwnym razie pojawia się komunikat o błędzie, że te katalogów nie można zapisać / usunąć, a proces aktualizacji zostaje przerwany. Jeśli użyję Unlockera PRZED uruchomieniem tego procesu, aktualizacja się powiedzie.
Sk8erPeter,

Odpowiedzi:

1

nie jest to bezpieczne, co pozwala na zapisanie pliku z interfejsu użytkownika Drupal w celu aktualizacji modułów, zamiast tego należy użyć ftp.

ale jeśli chcesz, przejdź do panelu hostingu plesk eksploruj katalog httpdocs kliknij prawym przyciskiem myszy, a następnie na pozwolenie, teraz w uprawnieniu daj uprawnienia do zapisu użytkownikowi puli aplikacji,

Dzięki

Bhupendraosd
źródło
0

Przyczyną posiadania blokady przez php-cgi jest „osobliwy” sposób, w jaki Windows obsługuje dostęp do plików, a php / iis obsługuje „buforowanie”. Zasadniczo właśnie utworzyłeś katalog i próbowałeś uzyskać do niego dostęp, ale uchwyt, który go utworzył, nie został zwolniony (więc nadal był zablokowany). To nie jest problem drupala, to kwestia IIS / PHP I nie ma znanego obejścia, które mogłem znaleźć.

Zasadniczo, czy podstawowa rada, że ​​nie używam IIS jest najlepsza, widziałem ten problem w więcej niż tylko drupalu z IIS, który rozwiązałem, przechodząc na apache HTTPD (na win32). Pamiętaj, że to było z powrotem w szkole, z projektem, w którym musiałem używać systemu Windows 2000.

Najlepszym sposobem, w jaki znam uruchamianie drupala w systemie Windows, jest apache (z powodu wewnętrznej obsługi php).

LvB
źródło
0

Kilka pomysłów, by kopać we właściwym kierunku:

Jeśli masz ten sam problem z Drush, nie jestem pewien, czy jest to problem z IIS. Czy Drush nie tylko wykonuje PHP z wiersza poleceń bez IIS? Możesz tego spróbować, zatrzymując IIS (iisreset / stop), a następnie uruchamiając polecenie aktualizacji Drush. Spodziewam się, że uzyskasz ten sam wynik.

Druga rzecz (przepraszam, nie mam wystarczającej reputacji, aby bezpośrednio skomentować odpowiedź Lawri):

„Zasadniczo właśnie utworzyłeś katalog i próbowałeś uzyskać do niego dostęp, ale uchwyt, który go utworzył, nie został zwolniony”

Czy to naprawdę prawda? Z oryginalnego postu wygląda na to, że utworzył folder w „tmp”, ale blokada znajduje się w już istniejącym folderze w „httpdocs”.

Domyślam się, że php-cgi próbuje skopiować z tmp na httpdocs, z jakiegoś powodu kończy się niepowodzeniem i nie usuwa blokady. Więc kiedy badasz po awarii, widzisz blokadę httpdocs, ale myślę, że początkowym powodem niepowodzenia nie jest blokada, może to jednak być problem z uprawnieniami w folderze tmp!

dustinmoris
źródło
gdyby tak było, nie mógł również przenieść go „ręcznie”, katalog zostanie utworzony w ramach procesu aktualizacji. IIS jest zaangażowany poprzez interfejs CGI, który jest znany z powodowania dziwnych błędów. zgłoszony błąd to nie błąd „nie można uzyskać dostępu”, ale błąd „nie można skopiować do”.
LvB