2011-06-09 25 views
30

Mi máquina host es ArchLinux y estoy ejecutando Apache en un invitado de CentOS. Tengo la configuración de vhost y todo el código del sitio en una carpeta compartida. Para poder poner la configuración de vhost en una carpeta compartida, monté la carpeta compartida como apache: apache.Carpeta compartida en VirtualBox para Apache

shared /mnt/shared vboxsf defaults,uid=48,gid=48 0 0 

Cuando estoy editando los archivos en el huésped, Apache consistentemente comenzará a enviar versiones antiguas del archivo con caracteres finales. En vim, aparecen como^@, así que supongo que son caracteres nulos. La cantidad de caracteres nulos está relacionada con la cantidad de cambios que realizo, incluso si edito la primera línea, aparecen caracteres nulos al final. Si tuviera que especular, parece una mala diferencia.

Si detengo httpd, umount, vuelvo a montar y comienzo httpd el archivo se ve bien. Solo reiniciar httpd no ayuda.

¿Qué debo hacer para depurar el montaje? Nada saltó hacia mí en /var/log.

+0

Puede agregar permisos de vbox a apache2: http://superuser.com/questions/335322/how-do-i-set-the-apache2-documentroot-to -a-vboxsf-virtualbox-shared-folder-p –

+0

'uid = 48, gid = 48' es lo que hace eso. No está relacionado con el problema que estaba teniendo. – mqsoh

+0

Posible duplicado de [Vagrant/VirtualBox/Apache2 Strange Cache Behavior] (http://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour) – kenorb

Respuesta

53

Estaba equivocado; estaba sucediendo en otro lado pero noté que solo estaba con los archivos .css y .js. Una búsqueda me llevó al this post que habla sobre un problema con vboxsf y archivos pequeños.

La solución es establecer, en Apache

EnableSendfile off 
+0

Esto no funcionó para mí.Sin embargo, si abro el archivo en vim en la máquina virtual y lo guardo tal como está, funcionará después de guardarlo en la máquina virtual. ¿Alguna otra idea? –

+2

Para completar: en la configuración de Nginx es "enviar archivo apagado"; –

1

Para responder a la pregunta específica "¿cómo hago para depurar el montaje":

(el siguiente es parafrasear, basado en una investigación que acabo de hacer en un problema causado por el mismo error en Virtualbox, pero con un servidor web diferente)

Después de diagnosticar el problema está sucediendo en algún lugar en cómo Apache lee archivos dentro el host virtual, usaría "strace -p" dentro del host virtual para registrar las llamadas al sistema de Apache.

Durante la ejecución de una cadena, solicite solo el archivo truncado/dañado.

El diagnóstico cuidadoso revelará que está estableciendo correctamente el archivo para obtener su longitud. Y luego lo está sirviendo usando sendfile syscall. Básicamente, confirmar que sendfile se está comportando mal, lo que significa que debe ser un error en la máquina virtual.

La búsqueda de "sendfile virtualbox" te lleva a estos errores.

https://www.virtualbox.org/ticket/9069 https://www.virtualbox.org/ticket/12597

Cuestiones relacionadas