2012-10-08 17 views
32

Tôi đang chạy lang thang trên OSX, Ubuntu và Windows 7 và sử dụng vim và Netbeans làm IDE trên máy chủ. Máy ảo đang chạy CentOS 6.3 và Apache 2.2. Docroot được đặt thành /vagrant.Các tệp JS và CSS ở dạng lang thang không được mã hóa đúng cách khi được lưu bên ngoài VM

Khi tôi chỉnh sửa tệp JS hoặc CSS và lưu tệp, trình duyệt sẽ quay lại và phát hiện các ký tự không hợp lệ. Khi tôi xem tệp trong trình duyệt, tôi thấy ký tự dấu hỏi kim cương thường trỏ đến vấn đề mã hóa. Tôi có thể mở tập tin trong vim bên trong máy ảo và lưu nó với :w ++enc=utf-8 và tệp sẽ tải bình thường.

Tôi đã thử nhiều IDE trên máy chủ và các hệ điều hành máy chủ khác nhau, và chỉ có thể xác định nó với một thứ gì đó liên quan đến âm đạo và thư mục được gắn kết. IDE của tôi không phải là vấn đề vì tôi có thể chạy các tệp cục bộ và chúng hoạt động hoặc lưu chúng vào máy từ xa và các tệp hoạt động. Chỉ khi tôi lưu chúng vào những gì được gắn trong /vagrant tôi có một vấn đề.

Có phải Apache hoặc cái gì khác trong hệ điều hành mà tôi cần thay đổi để làm việc này không?

+0

Đăng tiêu đề phản hồi apache –

+0

Trường hợp tương tự nhưng với 'nginx' làm máy chủ web và gặp vấn đề tương tự, vì vậy tôi không nghĩ rằng nó liên quan đến nginx,' dos2unix' cũng làm việc cho tôi – amd

+0

Có thể trùng lặp của [Vagrant/VirtualBox/Apache2 Hành vi Cache lạ] (http://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour) – kenorb

Trả lời

49

Tôi gặp sự cố này sáng nay. Đặt EnableSendfile thành tắt trong httpd.conf của bạn.

Nếu bạn nhìn vào httpd.conf của bạn, thông báo sẽ "tắt tính năng này nếu bạn phân phát từ hệ thống tệp được gắn trên NFS". Trong http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile nó giải thích rằng "Theo mặc định, khi xử lý yêu cầu không yêu cầu quyền truy cập vào dữ liệu trong tệp - ví dụ, khi phân phối tệp tĩnh - Apache sử dụng tệp gửi để phân phối nội dung tệp mà không bao giờ đọc tệp nếu hệ điều hành hỗ trợ nó. "

Vì máy chủ cửa sổ của bạn có hệ thống tệp ntfs, khách Linux không lưu trữ đúng tệp bằng sendfile và do đó apache cần gửi tệp đó. Điều này có thể gây ra sự chậm chạp khi yêu cầu tệp từ apache, nhưng nó không đáng kể.

+7

Cùng một vấn đề trên Nginx với OS X làm máy chủ. Một lần nữa, thiết lập 'sendfile off;' trong nginx.conf đã sửa lỗi này. – watermanio

+1

cũng làm việc cho tôi! mặc dù chắc chắn rằng, nếu bạn đang sử dụng âm đạo, bạn 'vagrant reload' để thay đổi tệp' nginx.conf' sẽ cập nhật. – tmthyjames

+0

@John_McCombs bạn là thần của tôi cho ngày hôm nay :). Trong trường hợp của tôi nó là '/ etc/apache2/apache2.conf' – sobi3ch

5

Tùy thuộc vào máy chủ bạn đang sử dụng.

Đối Nginx: trong /etc/nginx/nginx.conf:

thay đổi dòng có chứa sendfile on;-sendfile off;.

Đối Apache: trong /etc/httpd/conf/httpd.conf:

thay đổi remove bình luận cho EnableSendfile off;

không quên restart Nginx hay Apache của bạn. Nếu nó vẫn không hoạt động, exitvagrant reload hoặc một cái gì đó tương tự - khởi động lại máy ảo của bạn.

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