Problema de IIS con Drupal - Administrador de actualizaciones: ¡Actualización fallida! Los directorios están bloqueados por php-cgi.exe

9

Tengo algún problema al usar el "Administrador de actualizaciones" en la GUI. Algunos directorios se bloquean php-cgi.exey, por lo tanto, la sustitución de los directorios originales por los recién descargados (que son más recientes) no tiene éxito.
Pero tengo que mencionar que no es un problema de permisos, ya que los módulos pueden quedar instalado a través de "Instalar desde una URL" en /admin/modules/install, y el trabajo sin ningún problema.

Tomemos un ejemplo:

  1. Página de actualizaciones disponibles ( /admin/reports/updates/update):

    Actualizaciones disponibles

    Ahora verifico Seleccionar módulo (u otro) para actualizar ( no importa qué módulo elijo , ¡los resultados son los mismos! Así que es solo un ejemplo).

  2. Golpeo "descargar estas actualizaciones" botón.

  3. OK, la instancia actualizada del módulo se descarga sin problemas:
    "Las actualizaciones se descargaron correctamente ": Actualizaciones descargadas exitosamente
  4. Ahora hago clic en Continuar .
  5. Aquí viene el error. El resultado:
    " ¡Falló la actualización! Consulte el siguiente registro para obtener más información.
    Select_or_other
    • Error al instalar / actualizar
    • Transferencia de archivos no, la razón: No se puede copiar D:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txta /Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt. " ¡Actualización fallida!
  6. Bien, estoy empezando a tratar de inspeccionar las posibles razones.
    • Esto es lo que mis miradas Drupal estructura de directorios como: Estructura de directorio TC. Configuré ../tmpser el directorio temporal (en /admin/config/media/file-system), los archivos de Drupal están en htdocs. Esto es correcto, ya que puedo instalar módulos a través de la GUI, como mencioné anteriormente.
    • Cuando intento ingresar al htdocs/sites/all/modules/select_or_otherdirectorio, no puedo, porque aparece un mensaje "¡Acceso denegado en el archivo ......sites/all/modules/select_or_other!" al abrir en Total Commander, y " ...sites/all/modules/select_or_otherno es accesible Acceso denegado." cuando la abertura en el Explorador de Windows: tratando de abrir el directorio en Total Commander,tratando de abrir el directorio en el Explorador de Windows
    • OK, hago clic derecho en la carpeta y abro Unlocker a través de su asistente en el menú contextual. Dice que este directorio está bloqueado por php-cgi.exe: Unlocker - directorio bloqueado por php-cgi.exe hago clic en "Desbloquear todo", y la carpeta ahora se puede eliminar de sí misma (ya que ya no está bloqueada php-cgi.exe), por lo que simplemente
    • Puedo encontrar el directorio actualizado del módulo select_or_other en tmp: directorio del módulo actualizado en <code> tmp </code>
    • así que tengo que moverlo manualmente al sites/all/modulesdirectorio

¿Cuáles pueden ser las posibles razones del bloqueo del directorio php-cgi.exe? (¿Tal vez Windows Cache Extension 1.1 para PHP 5.3 instalado a través del Instalador de plataforma web? Pero en caso afirmativo, ¿por qué es que, por ejemplo, la eliminación de imágenes o similar a través de la GUI funciona correctamente?)
¿Qué puedo hacer para evitar este problema y dejar que "Actualizar gerente "trabajo?

Sk8erPeter
fuente
Estoy viendo exactamente el mismo comportamiento con Drupal 7.15 en IIS7 / 2008R2. Sería genial arreglar esto.
Nic
@Nic: estoy de acuerdo! :)
Sk8erPeter
He visto esto de forma intermitente. Por curiosidad, ¿también se desbloquea la actualización de su grupo de aplicaciones?
Brent
2
Sé que está fuera de tema, pero tengo que decirlo: huya de Drupal en IIS. Como puedo ver en las capturas de pantalla, es posible que lo esté utilizando para el desarrollo local. Echa un vistazo a WAMP o Acquia Dev Desktop . Si simplemente tiene que usarlo en un servidor de producción, ignore mi comentario :) Tengo que usar IIS para ciertos sitios y hasta ahora no ha sido una buena experiencia.
Aram Boyajyan
@Brent: No lo se. Después de ejecutar una página en Drupal, los archivos y directorios parecen bloquearse por un período desconocido. Por cierto, también estoy usando Drush , y cuando quiero actualizar un módulo usando drush up -y, experimento el mismo problema: tengo que desbloquear estos archivos y directorios con Unlocker para que funcione, de lo contrario recibo el mensaje de error de que estos los directorios no se pueden escribir / eliminar, y el proceso de actualización se interrumpe. Si uso Unlocker ANTES de ejecutar este proceso, la actualización es exitosa.
Sk8erPeter

Respuestas:

1

Esto no es seguro, ya que permite escribir archivos desde la interfaz de usuario de Drupal para actualizar módulos, en lugar de usar ftp.

pero si lo desea, vaya al panel de hosting de plesk, explore el directorio httpdocs, haga clic derecho y luego en permiso, ahora con permiso, otorgue permiso de escritura al usuario del grupo de aplicaciones,

Gracias

bhupendraosd
fuente
0

La razón de que php-cgi tenga el bloqueo se debe a la forma "peculiar" en que Windows maneja el acceso a los archivos, y php / iis maneja el "almacenamiento en caché". Básicamente, acaba de crear el directorio e intentó acceder a él, pero el identificador que lo creó no se lanzó (por lo que todavía estaba bloqueado). Este no es un problema de Drupal, es un problema de IIS / PHP. Y no hay una solución alternativa que pueda encontrar.

Básicamente, hacer el consejo básico de no usar IIS es lo mejor, he visto este problema en algo más que drupal con IIS que resolví moviéndome a apache HTTPD (en win32). Eso sí, eso fue para volver a la escuela, con un proyecto en el que se me pidió que usara Windows 2000.

La mejor manera que conozco de ejecutar drupal en Windows es a través de apache (debido al manejo interno de php).

LvB
fuente
0

Algunas ideas para cavar en la dirección correcta:

Si tiene el mismo problema de Drush, entonces no estoy seguro de si se trata de un problema de IIS. ¿Drush no solo ejecuta PHP desde la línea de comandos sin IIS? Puede intentar esto deteniendo IIS (iisreset / stop) y luego ejecutando el comando de actualización Drush y esperaría que obtenga el mismo resultado.

La otra cosa (lo siento, no tengo suficiente reputación para comentar directamente sobre la respuesta de Lawri):

"Básicamente, acabas de crear el directorio e intentaste acceder a él, pero el identificador que lo creó no se lanzó"

¿Es esto realmente cierto? De la publicación original parece que creó la carpeta en "tmp", pero el bloqueo está en la carpeta ya existente en "httpdocs".

Supongo que php-cgi intenta copiar de tmp a httpdocs, falla por alguna razón y no elimina el bloqueo. Entonces, cuando investigas después de la falla, ves un bloqueo en httpdocs, pero creo que la razón inicial para fallar no es un bloqueo, ¡después de todo, podría ser un problema de permiso en la carpeta tmp!

dustinmoris
fuente
si ese fuera el caso, tampoco podría moverlo 'a mano', el directorio se crea como parte del proceso de actualización. IIS participa a través de su interfaz CGI, que es conocida por causar errores extraños. y el error informado no es el error "no se puede acceder" sino "no se puede copiar a".
LvB