2013-07-04 30 views
11

Các triệu chứng của trận đấu vấn đề của tôi câu hỏi này khá nhiều chính xác: Changed static files are cropped/padded to the new size and served the old - FedoraServer được phục vụ các phiên bản cũ của tập tin tĩnh, nhưng tỉa hoặc đệm để phù hợp với chiều dài của phiên bản mới

Bất cứ khi nào tôi có thay đổi các tập tin tĩnh của tôi (ví dụ. js và .css), những thay đổi đó không hiển thị trong tệp được phân phối. Tuy nhiên, nếu thay đổi của tôi gây ra các tập tin để thay đổi chiều dài, sau đó các tập tin phục vụ không phù hợp với chiều dài mới:

  • Nếu tôi xóa ký tự từ bất cứ nơi nào trong file tĩnh, sau đó các tập tin phục vụ được tỉa ở cuối bởi nhiều nhân vật.
  • Nếu tôi thêm ký tự vào bất kỳ vị trí nào trong tệp tĩnh, thì tệp được phân phối sẽ được đệm với nhiều ký tự (đó là U + FFFD) ở cuối.

Lý do câu trả lời được liên kết không giải quyết được sự cố của tôi là tôi không sử dụng Apache. Tôi đang viết một ứng dụng web Python cho Heroku, vì vậy tôi đang sử dụng gunicorn và Flask (và do đó Werkzeug). Câu trả lời được liên kết nói rằng việc vô hiệu hóa sendfile trong Apache đã giải quyết được vấn đề, vì vậy tôi đã thử đặt biến 'USE_X_SENDFILE' thành False, theo this page, nhưng nó không giúp ích gì. Tôi cũng đặt 'SEND_FILE_MAX_AGE_DEFAULT' thành 1 trong một nỗ lực nữa để ngăn chặn một số loại bộ nhớ đệm xảy ra và điều đó cũng không giúp ích gì.

Nếu không rõ ràng, tôi thực sự không biết gì nhiều về định cấu hình máy chủ web, vì vậy, khi chạy hết các lần truy cập Google có liên quan, tôi không biết những gì có thể gây ra điều này. Cứu giúp?

+1

đó là sự cố 'sendfile' của hộp ảo. xem thêm http://serverfault.com/questions/269420/disable-caching-when-serving-static-files-with-nginx-for-development và http://stackoverflow.com/questions/6886606/changed-static- các tệp được cắt xén-đệm-thành-mới-kích thước-và-được-phục-vụ-cũ và http://abitwiser.wordpress.com/2011/02/24/virtualbox-hates-sendfile/ – Alp

+1

I thấy cùng một vấn đề. Nó không có mặt khi chạy máy chủ phát triển với Flask, chỉ khi sử dụng gunicorn. Tôi đang sử dụng Vagrant để quản lý VirtualBox VM. Tôi không chạy nginx hoặc Apache, không chắc chắn nếu có một tùy chọn để vô hiệu hóa sendfile trong gunicorn (nếu nó thậm chí là một tùy chọn). – Alex

Trả lời

4

Virtualbox hates sendfile. Nếu bạn tắt nó sẽ hoạt động.

Ví dụ: trong nginx bạn cần phải thêm sendfile: off;. Trong Apache, nó chỉ là EnableSendfile off.

+1

Bạn đã ngăn tôi từ 10 năm trở lên qua đêm! –

2

Cuối cùng, hóa ra điều này có thể do các sự cố VM gây ra. Mã trong câu hỏi được đặt trên một ổ đĩa Windows, nhưng đã được phục vụ từ bên trong một máy ảo Linux đang truy cập vào mã thông qua một thư mục chia sẻ. Việc trả lại cổ phiếu dường như để khắc phục vấn đề (mặc dù không nhất thiết phải đáng tin cậy).

+0

Tôi có cùng một vấn đề. Một VM lang thang chạy một máy chủ nginx mà máy chủ một tập tin tĩnh được đặt trên máy chủ. Khi các tập tin thay đổi, trim/pad như bạn desribe nó xảy ra. Bạn có biết một sửa chữa dễ dàng mà không cần phải cập nhật phần chia sẻ không? – Alp

+2

sửa lỗi bằng cách thêm 'sendfile: off;' vào cấu hình nginx của tôi vì [virtualbox ghét sendfile] (http://abitwiser.wordpress.com/2011/02/24/virtualbox-hates-sendfile/) – Alp

+0

@Alp: Could bạn đăng bài này như là một câu trả lời? Tôi đã có cùng một vấn đề chính xác và điều này giải quyết nó. – graup

Các vấn đề liên quan