2012-04-13 37 views
5

Tôi đang sử dụng Máy nén Django để quản lý các tệp/cà phê của tôi và nó rất tuyệt để phát triển, nhưng tôi đã có một số vấn đề để làm cho nó hoạt động để triển khai sản xuất của tôi.Làm thế nào để sử dụng django-máy nén với apache?

Ý tưởng của tôi là có apache để lưu trữ các tệp tĩnh, có thể trong máy chủ khác. Tôi đang đặt COMPRESS_OFFLINE = True trên tệp settings.py.

Sau đó, tôi làm như sau

  • python manage.py compress - Đây populates thư mục trong thư mục CACHEstatic của tôi, nơi tất cả các file tĩnh sẽ được thu thập.
  • python manage.py collectstatic - Điều này thu thập các tệp tĩnh từ tất cả các ứng dụng trong dự án của tôi (một số trong đó không sử dụng máy nén) vào thư mục static của tôi.
  • Sao chép thư mục static ở đâu đó để được lưu trữ bằng apache. Và thiết lập apache để phục vụ các tập tin.
  • Sửa đổi biến số static_url trong tệp settings.py để trỏ đến máy chủ tĩnh.

Nếu tôi mở bất kỳ trang, tôi nhận được lỗi sau trên máy chủ của tôi, điều này dường như chỉ xảy ra khi tôi có DEBUG = FalseCOMPRESS_OFFLINE = True trên settings.py tập tin của tôi:

TemplateSyntaxError: Caught OfflineGenerationError while rendering: You have offline compression enabled but key "777ba26736d046ab043dc151e7e9a060" is missing from offline manifest. You may need to run "python manage.py compress".

Khi tôi kiểm tra thư mục static/CACHE , tôi xác nhận những gì các lỗi nói, đây là manifest.json tập tin của tôi:

{ 
    "6189b8598993d1cbdbd35d4dfd1a6711": "<script type=\"text/javascript\" src=\"http://192.168.1.123/CACHE/js/2f6ca6616bd6.js\"></script>", 
    "5c66dbed0e5b766c6e32773cd8585f3c": "<link rel=\"stylesheet\" href=\"http://192.168.1.123/CACHE/css/154d95903951.css\" type=\"text/css\" />" 
} 

Nếu tôi xóa các thư mục CACHE và chạy lại 012.343., tôi nhận được một bộ ID mới trên cả thông báo lỗi và tệp kê khai, nhưng ID trên lỗi vẫn bị thiếu trên tệp kê khai.

Vì vậy, tôi đoán có hai câu hỏi ở đây. Tại sao nó không làm việc? Cách thích hợp để đạt được điều này là gì?

Cảm ơn.

+0

Bạn có trình tìm kiếm của máy nén trong 'STATICFILES_FINDERS' trong cài đặt không? – ilvar

+0

Vui lòng hiển thị mã mẫu của bạn nơi bạn sử dụng thẻ '{% compress%}', điều này sẽ giúp gỡ lỗi 'TemplateSyntaxError' :) – vdboor

Trả lời

15

Nếu bạn đã chạy nén, và bạn vẫn nhận được thông báo

OfflineGenerationError: You have offline compression enabled but key "4971a40e3b459a8cda8287a7f7caa96d" is missing from offline manifest. You may need to run "python manage.py compress"

sau đó nó có khả năng bạn có nội dung động bên trong nén thẻ. Đảm bảo rằng việc nén luôn là khối trong cùng và không có thẻ nào bên trong khối nén.

+1

Cho những người tương lai từ Google: có nội dung động bên trong các thẻ nén (ví dụ:' {% compress css %} {% if bootstrap%} ') có thể gây ra OfflineGenerationError trong tất cả các loại cách kỳ lạ - chỉ bao gồm cho một số người dùng trang web của bạn mặc dù họ sẽ được phân phối cùng một mẫu! Ban đầu tôi không quan tâm đến câu trả lời này vì tình hình của tôi chỉ áp dụng cho một số người dùng, nhưng đó là do nguy hiểm của chính tôi. Đây là câu trả lời. – kqr

3

Tôi đoán bạn đang sử dụng máy nén django 1.1.2 không hỗ trợ thẻ mẫu tĩnh {% tĩnh "..."%}.

Hãy thử cài đặt phiên bản dev của django-máy nén với:

pip install django_compressor==dev

Nó sẽ giải quyết vấn đề.

0

David Wolfe là hoàn toàn đúng: đã đào Xuyên tất cả các mã của tôi để thoát khỏi {% xuyên ... vv tôi làm cho nó như thế này:

<script> 
window.__enter_email = "{% trans "Enter correct email" %}" 
window.__url = "{% url "shop:go" %}" 
</script> 
{% compress js %} 
<script> 
$("#bla")..... window.__enter_email ... 
</script> 
{% endcompress %} 

Hope, giúp một ai đó!

+0

Cảm ơn, tôi đã đánh dấu phản ứng của David là được chấp nhận. Tôi đã không thử nghiệm nó (Tôi đã không làm việc này trong nhiều năm), nhưng dựa trên upvotes và bình luận của bạn nó có vẻ là giải pháp tốt. –

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