Pregunta

Estoy usando Vagrant para ejecutar una VirtualBox con Ubuntu con Apache2.

El servidor web, entre otros, sirve archivos estáticos desde mi directorio / vagrant.

Esto funciona bien la mayor parte del tiempo.Pero cuando cambio una imagen en mi carpeta compartida y vuelvo a cargar el sitio web, se muestra la versión anterior de la imagen, pero se trunca.

Funciona si primero elimino la imagen anterior de mi carpeta compartida, actualizo el sitio web para que NO se muestre la imagen, luego guardo el nuevo archivo y vuelvo a cargar el sitio web.

¿Alguien sabía de este problema?No tengo nada especial instalado, solo Apache 2 con mod_rewrite y PHP con Mongo, Complemento APC, MongoDB y NodeJS con un montón de scripts.

¿Fue útil?

Solución

Encontré la respuesta aquí :

jc,

Lo que está viendo es probablemente porque el servidor que atiende a los archivos estáticos está utilizando el "Sendfile ()" Syscall, que se rompe con el archivo VirtualBox sistema.Debe deshabilitar el uso de SendFile () en su servidor.Para apache:

EnableDFile OFF

y para nginx: sendfile apagado;

mejor, Mitchell

Otros consejos

¡Esto me ha estado volviendo loco!Gracias por publicar esto Philipp.Para aquellos de ustedes que no tienen idea de cómo cambiar el archivo de configuración, esto es lo que hice:

Para encontrar el archivo: $ sudo find -name "nginx.conf"

El mío estaba aquí: ./etc/nginx/nginx.conf

Así que ejecuté esto para modificarlo: $ sudo nano ./etc/nginx/nginx.conf

Cambie la línea que contiene sendfile on; para sendfile off;

No te olvides de exit y vagrant reload!

Este es un error antiguo en VirtualBox (consulte: # 819 , # 9069 , # 12597 , # 14920 ) donde vboxvfs parece tener algunos Problemas con el acceso madurado a los archivos que están sincronizados.

Esto puede suceder cuando edita el archivo fuera de VM, y espera ver el mismo cambio dentro de la VM.

Para solucionar este problema, debe deshabilitar el soporte del kernel Sendfile para entregar archivos al cliente al desactivar opción EnableSendfile , ya sea en httpd.conf o en el archivo VHOSTS, por ejemplo,

<Directory "/path-to-nfs-files">
  EnableSendfile Off
</Directory>

Este es especialmente un problema para los archivos montados NFS o SMB. Después de que el cambio vuelva a cargar el Apache.

Similar para Nginx (en nginx.conf), por ejemplo,

sendfile off;


Otra solución es recordar que no edite los archivos en el host, o intente volver a editar el mismo archivo, pero dentro de la VM.


Otra solución incluye dejar caer el Pagecache Linux, por ejemplo.

echo 1 > /proc/sys/vm/drop_caches

o para borrar los cachés cada segundo (según esta publicación ), intente:

watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)

Nota: Número 1 significa liberar Pagecache, 2 para dentries e inodos, 3 para Pagecache, Dentries e Inodés.


El problema anterior se puede replicar mediante el siguiente programa MMAP-TEST, consulte: mmap-problem.c .

Tengo un problema similar con VirtualBox/ventana acoplable/Nginx medio ambiente.

La decisión de abandonar Linux pagecache echo 1 > /proc/sys/vm/drop_caches funciona bien, pero se ve incómodo.

También la directiva sendfile off; en el nginx.conf no soluciona el problema y trató de utilizar con expires off; la directiva juntos y fue un éxito.

Por lo tanto, mi decisión parece

sendfile off;
expires off;

Para cualquiera que utilice Laravel 5, la debugbar y el BRUGSERSYNC de Barryvdh a través de Gulp.Watch, puede obtener este error.Tuve exactamente el mismo error debido a cómo la sincronización del navegador estaba proxy mi solicitud. Si veía mi servidor dev a través de: http://127.0.0.1:3000/Laravel/Page Tengo el error http://127.0.0.1/laravel/page error ido.

Lo he marcado con nuestros amigos en Browsersync, hacen un trabajo increíble.Entonces, es más de una razón que una solución, sino en lugar de pasar horas tratando de solucionarla, prueba para ver si este es su problema antes de perder más tiempo.

Este problema también es similar a los errores que se encuentran en este artículo

Este también fue responsable del comportamiento extraño con respecto a los archivos CSS en una configuración de Centlos / VirtualBox.

Puede cambiar el contenido de un archivo CSS en la carpeta / Vagrant, y el navegador mostrará un estado de 200 (en lugar de un 304), lo que significa que sabía que el archivo era nuevo.Pero los contenidos no habrían cambiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top