Question

J'utilise Vagrant pour exécuter une VirtualBox alimentée par Ubuntu avec Apache2.

Le serveur Web, entre autres, sert des fichiers statiques à partir de mon répertoire / Vagrant.

Cela fonctionne bien la plupart du temps. Mais lorsque je change une image sur mon dossier partagé et recharger le site Web, la version précédente de l'image est servie, mais elle est tronquée.

Cela fonctionne si je supprime d'abord l'ancienne image de mon dossier partagé, actualisez le site Web afin que l'image ne soit pas affichée, puis enregistrez le nouveau fichier et rechargez à nouveau le site Web.

Est-ce que quelqu'un connaissait ce problème? Je n'ai rien d'installation de spécial, juste Apache 2 avec mod_rewrite et php avec Mongo, plugin APC, MongoDB ainsi que NodeJs avec un tas de scripts.

Était-ce utile?

La solution

J'ai trouvé la réponse ici:

JC,

Ce que vous voyez, c'est probablement parce que le serveur desservant les fichiers statiques utilise le syscall "sendFile ()", qui est rompu avec le système de fichiers VirtualBox. Vous devez désactiver l'utilisation SendFile () dans votre serveur. Pour Apache:

ActivedFile Off

Et pour Nginx: SendFile off;

Meilleur, Mitchell

Autres conseils

Cela me rend fou! Merci d'avoir publié ce Philipp. Pour ceux d'entre vous qui ne savent pas comment changer le fichier de configuration, voici ce que j'ai fait:

Pour trouver le fichier: $ sudo find -name "nginx.conf"

Le mien était là: ./etc/nginx/nginx.conf

J'ai donc couru ceci pour le modifier: $ sudo nano ./etc/nginx/nginx.conf

Changer la ligne qui contient sendfile on; à sendfile off;

N'oubliez pas exit et vagrant reload!

Ceci est un vieux bug dans VirtualBox (voir: #819, #9069, #12597, #14920) où VBOXVFS semble avoir des problèmes avec l'accès mmappé aux fichiers qui sont synchronisés.

Cela peut se produire lorsque vous modifiez le fichier en dehors de la machine virtuelle, et vous vous attendez à voir le même changement dans la machine virtuelle.

Pour contourner ce problème, vous devez désactiver le support SendFile du noyau pour livrer des fichiers au client en désactivant EnableSendfile option, soit en httpd.conf ou dans le fichier vhosts, par exemple

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

C'est particulièrement un problème pour les fichiers montés NFS ou SMB. Après le changement, rechargez l'Apache.

Similaire à Nginx (dans nginx.conf), par exemple

sendfile off;

Une autre solution de contournement est de ne pas se rappeler de ne pas modifier les fichiers de l'hôte, ou d'essayer de rééditer le même fichier, mais dans la machine virtuelle.


Une autre solution de contournement comprend la suppression du Linux PageCache, par exemple

echo 1 > /proc/sys/vm/drop_caches

Ou pour effacer les caches chaque seconde (selon ce post), essayer:

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

Remarque: le numéro 1 signifie libérer PageCache, 2 pour les dentries et les inodes, 3 pour PageCache, les dentries et les inodes.


Le problème ci-dessus peut être reproduit par le programme MMAP-Test suivant, voir: mmap-problem.c.

J'ai un problème similaire avec l'environnement VirtualBox / Docker / Nginx.

La décision de laisser tomber Linux PageCache echo 1 > /proc/sys/vm/drop_caches fonctionne bien mais a l'air gênant.

Aussi la directive sendfile off; dans le nginx.conf Je n'ai pas résolu le problème et j'ai essayé de l'utiliser avec expires off; Directive ensemble et cela a réussi.

Alors, ma décision ressemble

sendfile off;
expires off;

Pour tous ceux qui utilisent Laravel 5, Debugbar et Browsersync de BarryVDH via Gulp.Watch, vous pouvez obtenir cette erreur. J'ai eu exactement la même erreur en raison de la façon dont la synchronisation de Browser proxie ma demande. Si je visuais mon serveur de développement via:http://127.0.0.1:3000/laravel/page J'ai eu l'erreurhttp://127.0.0.1/laravel/page Erreur disparue.

Je l'ai signalé avec nos amis chez Browsersync, ils font un travail formidable. Donc, c'est plus une raison qu'une solution, mais plutôt que de passer des heures à essayer de le réparer, testez pour voir si c'est votre problème avant de perdre plus de temps.

Ce problème est également similaire à les erreurs trouvées dans cet article

Cela était également responsable d'un comportement étrange concernant les fichiers CSS dans une configuration CENTOS / VirtualBox.

Vous pouvez modifier le contenu d'un fichier CSS dans le dossier / Vagrant, et le navigateur afficherait un statut de 200 (au lieu d'un 304), ce qui signifie qu'il savait que le fichier était nouveau. Mais le contenu n'aurait pas changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top