IIS-Problem mit Drupal - Update Manager: Update fehlgeschlagen! Verzeichnisse werden von php-cgi.exe gesperrt

9

Ich habe ein Problem bei der Verwendung des "Update Managers" auf der GUI. Einige Verzeichnisse werden von gesperrt php-cgi.exe, und daher ist das Ersetzen der ursprünglichen Verzeichnisse durch die neu heruntergeladenen (neueren) Verzeichnisse nicht erfolgreich.
Aber ich habe zu erwähnen , dass es nicht ein Berechtigungsproblem, da die Module über get installiert können „Software von einer URL“ auf /admin/modules/install, und die Arbeit ohne ein Problem.

Nehmen wir ein Beispiel:

  1. Seite für verfügbare Updates ( /admin/reports/updates/update):

    Verfügbare Updates

    Jetzt überprüfe ich das Select (oder ein anderes) Modul, das aktualisiert werden soll ( es spielt keine Rolle, welches Modul ich wähle , die Ergebnisse sind die gleichen !! es ist also nur ein Beispiel).

  2. Ich klicke auf "Diese Updates herunterladen" .

  3. OK, die aktualisierte Instanz des Moduls wird problemlos heruntergeladen :
    " Updates erfolgreich heruntergeladen ": Updates erfolgreich heruntergeladen
  4. Jetzt klicke ich auf Weiter .
  5. Hier kommt der Fehler. Das Ergebnis:
    " Update fehlgeschlagen! Weitere Informationen finden Sie im Protokoll unten.
    Select_or_other
    • Fehler beim Installieren / Aktualisieren
    • File Transfer fehlgeschlagen, Grund: Kann kopiert nicht D:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txtzu /Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt. "" Update fehlgeschlagen!
  6. OK, ich fange an zu versuchen, die möglichen Gründe zu untersuchen.
    • So sieht meine Drupal-Verzeichnisstruktur aus : TC-Verzeichnisstruktur. Ich ../tmphabe das temporäre Verzeichnis (in /admin/config/media/file-system) festgelegt, in dem sich die Drupal-Dateien befinden htdocs. Dies ist richtig, da ich Module über die GUI installieren kann, wie oben erwähnt.
    • Wenn ich versuche, das htdocs/sites/all/modules/select_or_otherVerzeichnis aufzurufen, kann ich das nicht, da ich die Meldung "Zugriff auf Datei verweigert ......sites/all/modules/select_or_other!" beim Öffnen in Total Commander und " ...sites/all/modules/select_or_otherZugriff nicht möglich. Zugriff verweigert" beim Öffnen in Windows Explorer : versucht, das Verzeichnis in Total Commander zu öffnen,versuchen, das Verzeichnis im Windows Explorer zu öffnen
    • OK, ich klicke mit der rechten Maustaste auf den Ordner und öffne Unlocker über seinen Assistenten im Kontextmenü. Es heißt, dieses Verzeichnis ist gesperrt durch php-cgi.exe: Unlocker - Verzeichnis gesperrt von php-cgi.exe Ich klicke auf "Alle entsperren", und der Ordner kann jetzt von sich selbst gelöscht werden (da er nicht mehr von gesperrt ist php-cgi.exe), also einfach
    • Ich finde das aktualisierte Verzeichnis des select_or_other-Moduls in tmp: Das Verzeichnis des Moduls wurde in <code> tmp </ code> aktualisiert
    • also muss ich es manuell in das verzeichnis verschieben sites/all/modules.

Was können die möglichen Gründe für die Sperrung des Verzeichnisses sein php-cgi.exe? (Möglicherweise wird Windows Cache Extension 1.1 für PHP 5.3 über das Web Platform Installer installiert? Wenn ja, warum funktioniert das Löschen von Bildern oder Ähnlichem über die GUI beispielsweise ordnungsgemäß?)
Was kann ich tun, um dieses Problem zu vermeiden, und lassen Sie "Aktualisieren" Manager "Arbeit?

Sk8erPeter
quelle
Ich sehe genau das gleiche Verhalten mit Drupal 7.15 auf IIS7 / 2008R2. Es wäre großartig, dies zu beheben.
Nic
@Nic: Ich stimme zu! :)
Sk8erPeter
Ich habe das zeitweise gesehen. Wird aus Neugier auch die Aktualisierung Ihres App-Pools freigeschaltet?
Brent
2
Ich weiß, dass es kein Thema ist, aber ich muss es sagen - laufe vor Drupal auf IIS davon. Wie ich auf den Screenshots sehen kann, verwenden Sie es möglicherweise für die lokale Entwicklung. Schauen Sie sich WAMP oder Acquia Dev Desktop an . Wenn Sie es einfach auf einem Produktionsserver verwenden müssen, ignorieren Sie meinen Kommentar :) Ich muss IIS für bestimmte Websites verwenden und bisher war es keine gute Erfahrung.
Aram Boyajyan
@Brent: Ich weiß es nicht. Nach dem Ausführen einer Seite in Drupal scheinen die Dateien und Verzeichnisse für einen unbekannten Zeitraum gesperrt zu sein. Übrigens verwende ich auch Drush , und wenn ich ein Modul mit aktualisieren möchte, tritt drush up -ydas gleiche Problem auf: Ich muss diese Dateien und Verzeichnisse mit Unlocker entsperren , damit es funktioniert, andernfalls wird die Fehlermeldung angezeigt , dass dies der Fall ist Verzeichnisse können nicht geschrieben / entfernt werden und der Aktualisierungsprozess wird unterbrochen. Wenn ich Unlocker verwende, bevor dieser Prozess ausgeführt wird, ist das Update erfolgreich.
Sk8erPeter

Antworten:

1

Dies ist nicht sicher, um Dateien von der Drupal-Benutzeroberfläche zum Aktualisieren von Modulen schreiben zu können, anstatt FTP zu verwenden.

Wenn Sie jedoch möchten, gehen Sie zum plesk-Bereich des Hosting-Explorations-httpdocs-Verzeichnisses. Klicken Sie mit der rechten Maustaste und dann auf die Berechtigung. Geben Sie dem Benutzer des Anwendungspools in der Berechtigung eine Schreibberechtigung.

Vielen Dank

bhupendraosd
quelle
0

Der Grund für php-cgi für die Sperre liegt in der "eigentümlichen" Art und Weise, wie Windows den Dateizugriff handhabt und php / iis das "Caching" handhabt. Grundsätzlich haben Sie das Verzeichnis nur erstellt und versucht, darauf zuzugreifen, aber das Handle, mit dem es erstellt wurde, wurde nicht freigegeben (daher war es immer noch gesperrt). Dies ist kein Drupal-Problem, sondern ein IIS / PHP-Problem. Es ist keine Problemumgehung bekannt, die ich finden könnte.

Grundsätzlich ist der beste Ratschlag, IIS nicht zu verwenden, der beste. Ich habe dieses Problem nicht nur in Drupal mit IIS gesehen, das ich durch die Umstellung auf Apache HTTPD (unter Win32) gelöst habe. Wohlgemerkt, das war für die Schule, mit einem Projekt, bei dem ich Windows 2000 verwenden musste.

Der beste Weg, Drupal unter Windows auszuführen, ist Apache (wegen der internen Handhabung von PHP).

LvB
quelle
0

Einige Ideen, um in die richtige Richtung zu graben:

Wenn Sie das gleiche Problem von Drush haben, bin ich mir nicht sicher, ob dies ein IIS-Problem ist. Führt Drush PHP nicht nur über die Befehlszeile ohne IIS aus? Sie können dies versuchen, indem Sie IIS (iisreset / stop) stoppen und dann den Befehl Drush update ausführen. Ich würde erwarten, dass Sie das gleiche Ergebnis erzielen.

Die andere Sache (Entschuldigung, ich habe nicht genug Ruf, um Lawris Antwort direkt zu kommentieren):

"Grundsätzlich haben Sie gerade das Verzeichnis erstellt und versucht, darauf zuzugreifen, aber das Handle, mit dem es erstellt wurde, wurde nicht freigegeben."

Ist das wirklich wahr? Aus dem ursprünglichen Beitrag geht hervor, dass er den Ordner in "tmp" erstellt hat, aber die Sperre für den bereits vorhandenen Ordner in "httpdocs".

Ich vermute, dass php-cgi versucht, von tmp nach httpdocs zu kopieren, aus einem bestimmten Grund fehlschlägt und die Sperre nicht aufhebt. Wenn Sie also nach dem Fehler nachforschen, sehen Sie eine Sperre für httpdocs, aber ich denke, der ursprüngliche Grund für den Fehler ist keine Sperre, es könnte sich schließlich um ein Berechtigungsproblem für den tmp-Ordner handeln!

Dustinmoris
quelle
Wenn dies der Fall war, konnte er es auch nicht von Hand verschieben. Das Verzeichnis wird im Rahmen des Aktualisierungsprozesses erstellt. IIS ist über seine CGI-Schnittstelle beteiligt, die dafür bekannt ist, seltsame Fehler zu verursachen. und der gemeldete Fehler ist nicht der Fehler "kann nicht zugreifen", sondern "kann nicht kopieren nach".
LvB