Вопрос

Я использую Vagrant для запуска VirtualBox на базе Ubuntu с Apache2.

Веб-сервер, среди прочего, обслуживает статические файлы из каталога my /vagrant.

В большинстве случаев это хорошо работает.Но когда я меняю изображение в своей общей папке и перезагружаю веб-сайт, отображается предыдущая версия изображения, но она усечена.

Это работает, если я сначала удалю старую картинку из своей общей папки, обновлю веб-сайт, чтобы картинка не отображалась, затем сохраню новый файл и снова перезагрузлю веб-сайт.

Кто-нибудь знал об этой проблеме?У меня не установлено ничего особенного, только Apache 2 с mod_rewrite и PHP с Mongo, APC Plugin, MongoDB, а также NodeJS с кучей скриптов.

Это было полезно?

Решение

Нашел ответ здесь :

JC,

Что вы видите, вероятно, потому что сервер, обслуживающий статические файлы Используется SESCALL «SendFile ()», который нарушен с файлом VirtualBox система.Вам нужно отключить использование SendFile () на вашем сервере.Для Apache:

Включаетндифийки от

и для nginx: SendFile Off;

лучше, Митчелл

Другие советы

Это сводит меня с ума!Спасибо, что опубликовал это, Филипп.Для тех из вас, кто понятия не имеет, как изменить конфигурационный файл, вот что я сделал:

Чтобы найти файл: $ sudo find -name "nginx.conf"

Мой был здесь: ./etc/nginx/nginx.conf

Итак, я запустил это, чтобы изменить его: $ sudo nano ./etc/nginx/nginx.conf

Измените строку, содержащую sendfile on; к sendfile off;

Не забывай об этом exit и vagrant reload!

Это старая ошибка в VirtualBox (см.: #819, #9069, #12597, #14920) где у vboxvfs, похоже, есть некоторые проблемы с mmapped доступом к файлам, которые синхронизированы.

Это может произойти, когда вы редактируете файл за пределами виртуальной машины и ожидаете увидеть те же изменения внутри виртуальной машины.

Чтобы обойти эту проблему, вам необходимо отключить поддержку kernel sendfile для доставки файлов клиенту, отключив EnableSendfile вариант, либо в httpd.conf или в файле vhosts, например.

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

Это особенно проблематично для файлов, подключенных к NFS или SMB.После внесения изменений перезагрузите Apache.

Аналогично для Nginxnginx.conf), например.

sendfile off;

Другой обходной путь заключается в том, чтобы не забывать редактировать файлы на хосте или попытаться повторно отредактировать тот же файл, но внутри виртуальной машины.


Другой обходной путь включает удаление кэша страниц Linux, например

echo 1 > /proc/sys/vm/drop_caches

Или очищать кэши каждую секунду (согласно этот пост), попробуйте:

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

Примечание:Цифра 1 обозначает освобождение кэша страниц, 2 - для dentries и inode-ов, 3 - для pagecache, dentries и inode-ов.


Описанная выше проблема может быть воспроизведена с помощью следующей программы mmap-тестирования, см.: mmap-problem.c.

У меня аналогичная проблема со средой VirtualBox/Docker/Nginx.

Решение об удалении Linux pagecache echo 1 > /proc/sys/vm/drop_caches работает нормально, но выглядит неуклюже.

Также директива sendfile off; в nginx.conf это не решило проблему, и я попытался использовать его с expires off; руководили вместе, и это было успешно.

Итак, мое решение выглядит следующим образом

sendfile off;
expires off;

Для всех, кто использует Laravel 5, DEBUBBAR и Browberbar и BrowserSYNC через Gulp.watch, вы можете получить эту ошибку.У меня именно та же ошибка имела такую же ошибку из-за того, как синхронизация браузера просыпается моим запросом. Если я просматривал свой сервер Dev через: http://127.0.0.1:3000/laravel/sage я получил ошибку http://127.0.0.1/laravel/sage Ошибка исчезла.

Я пометил его с нашими друзьями в браузерсе, они делают потрясающую работу.Итак, это скорее причина, чем решение, но, а не тратить часы, пытаясь его исправить, тестировать, чтобы увидеть, если это ваша проблема, прежде чем тратить больше времени.

Эта проблема также похожа на Ошибки, найденные в этой статье

Это также отвечает за странное поведение в отношении файлов CSS в настройке CentOS / VirtualBox.

Вы можете изменить содержимое файла CSS в / бродяженую папку, и браузер будет отображать состояние 200 (вместо 304), что означает, что он знал, что файл был новым.Но содержание не изменилось бы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top