Pergunta

Estou usando o Vagrant para executar um VirtualBox com Ubuntu com Apache2.

O servidor web, entre outros, serve arquivos estáticos do meu diretório /vagrant.

Isso funciona bem na maioria das vezes.Mas quando altero uma imagem na minha pasta compartilhada e recarrego o site, a versão anterior da imagem é veiculada, mas fica truncada.

Funciona se eu excluir primeiro a imagem antiga da minha pasta compartilhada, atualizar o site para que a imagem NÃO seja mostrada, salvar o novo arquivo e recarregar o site novamente.

Alguém sabia desse problema?Não tenho nada de especial instalado, apenas Apache 2 com mod_rewrite e PHP com Mongo, APC Plugin, MongoDB e também nodeJS com vários scripts.

Foi útil?

Solução

Encontrei a resposta aqui :

.

jc,

O que você está vendo é provavelmente porque o servidor servindo os arquivos estáticos está usando o syscall "sendfile ()", que é quebrado com o arquivo do VirtualBox sistema.Você precisa desativar o uso do SendFile () no seu servidor.Para Apache:

permite OFF OFF

e para nginx: sendfile off;

melhor, Mitchell

Outras dicas

Isso tem me deixado louco!Obrigado por postar isso Philipp.Para aqueles que não têm ideia de como alterar o arquivo de configuração, aqui está o que eu fiz:

Para encontrar o arquivo: $ sudo find -name "nginx.conf"

O meu estava aqui: ./etc/nginx/nginx.conf

Então eu executei isso para modificá-lo: $ sudo nano ./etc/nginx/nginx.conf

Altere a linha que contém sendfile on; para sendfile off;

Não se esqueça de exit e vagrant reload!

Este é um bug antigo no VirtualBox (veja: #819, #9069, #12597, #14920) onde o vboxvfs parece ter alguns problemas com o acesso mapeado aos arquivos que são sincronizados.

Isso pode acontecer quando você edita o arquivo fora da VM e espera ver a mesma alteração dentro da VM.

Para solucionar esse problema, você precisa desabilitar o suporte sendfile do kernel para entregar arquivos ao cliente desabilitando EnableSendfile opção, seja em httpd.conf ou no arquivo vhosts, por ex.

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

Isso é especialmente problemático para arquivos montados em NFS ou SMB.Após a alteração recarregue o Apache.

Semelhante para Nginx (em nginx.conf), por exemplo.

sendfile off;

Outra solução alternativa é lembrar de não editar os arquivos no host ou tentar reeditar o mesmo arquivo, mas dentro da VM.


Outra solução alternativa inclui descartar o pagecache do Linux, por ex.

echo 1 > /proc/sys/vm/drop_caches

Ou para limpar os caches a cada segundo (conforme esta postagem), tentar:

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

Observação:O número 1 significa liberar pagecache, 2 para dentries e inodes, 3 para pagecache, dentries e inodes.


O problema acima pode ser replicado pelo seguinte programa mmap-test, veja: mmap-problem.c.

Tenho um problema semelhante com o ambiente VirtualBox/Docker/Nginx.

A decisão de abandonar o pagecache do Linux echo 1 > /proc/sys/vm/drop_caches funciona bem, mas parece estranho.

Também a directiva sendfile off; no nginx.conf não resolveu o problema e tentei usá-lo com expires off; directiva em conjunto e foi bem sucedida.

Então, minha decisão parece

sendfile off;
expires off;

Para qualquer um usando o Laravel 5, Debugbar Barryvdh e Browsersync Via Gulp.watch, você pode obter este erro.Eu tinha exatamente o mesmo erro por causa de como a sincronização do navegador estava proxiando meu pedido. Se eu vi meu servidor Dev via: http://127.0.0.1:3000/laravel/page Eu recebi o erro http://127.0.0.1/laravel/page erro ido.

Eu sinalizei com nossos amigos no Browsersync, eles fazem um trabalho incrível.Então, é mais uma razão do que uma solução, mas em vez de passar horas tentando corrigi-lo, teste para ver se este é o seu problema antes de desperdiçar mais tempo.

Esta questão também é semelhante a Os erros encontrados neste artigo

Isso também foi responsável pelo comportamento estranho em relação aos arquivos CSS em uma configuração de CentOS / VirtualBox.

Você pode alterar o conteúdo de um arquivo CSS na pasta / VAGRANT, e o navegador mostraria um status de 200 (em vez de um 304), o que significa que sabia que o arquivo era novo.Mas o conteúdo não teria mudado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top