2014-11-09 37 views
17

Tôi đang cố phân phát tệp tĩnh qua WhiteNoise theo đề xuất của Heroku. Khi tôi chạy collectstatic trong môi trường phát triển của tôi, điều này xảy ra:lệnh 'collectstatic' không thành công khi WhiteNoise được bật

Post-processing 'css/iconic/open-iconic-bootstrap.css' failed! 

Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/core/management/base.py", line 533, in handle 
    return self.handle_noargs(**options) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle_noargs 
    collected = self.collect() 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 120, in collect 
    raise processed 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 242, in post_process 
    content = pattern.sub(converter, content) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 181, in converter 
    hashed_url = self.url(unquote(joined_result), force=True) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 128, in url 
    hashed_name = self.stored_name(clean_name) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 277, in stored_name 
    cache_name = self.clean_name(self.hashed_name(name)) 
    File "/home/Pieter/.virtualenvs/radiant/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 91, in hashed_name 
    (clean_name, self)) 
ValueError: The file 'css/fonts/open-iconic.eot' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f57fc5b1550>. 

Lệnh thu tĩnh chạy mà không có sự cố khi tôi nhận xét ra dòng này trong cài đặt của tôi:

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

gì đang xảy ra sai ở đây và làm thế nào để Tôi sửa nó? Tôi đã thử xóa thư mục đầu ra tệp tĩnh của mình. Nó chạy trơn tru cho đến khi nó bắt đầu xử lý một tệp cụ thể.

Trả lời

16

Sự cố ở đây là css/iconic/open-iconic-bootstrap.css đang tham chiếu tệp, open-iconic.eot, không tồn tại ở vị trí mong muốn.

Khi bạn chạy collectstatic với phụ trợ lưu trữ đó, Django cố gắng ghi lại tất cả các URL trong tệp CSS của bạn để chúng tham chiếu tệp theo tên mới của chúng, ví dụ: css/iconic/open-iconic.8a7442ca6bed.eot. Nếu nó không thể tìm thấy tập tin nó dừng lại với lỗi đó.

+0

Hành vi này có cụ thể đối với WhiteNoise không? Bởi vì tôi không gặp vấn đề nếu tôi đã tắt WhiteNoise. Tôi đã kiểm tra 'open-iconic-bootstrap.css' và không có sự khác biệt giữa tệp gốc và bản sao trong thư mục tĩnh. – Pieter

+4

Không, nó không phải là WhiteNoise cụ thể: bạn sẽ tìm thấy bạn nhận được nó nếu bạn sử dụng 'django.contrib.staticfiles.storage.CachedStaticFilesStorage' là tốt. Bạn không phải sử dụng phần cuối lưu trữ để sử dụng WhiteNoise, nó chỉ giúp bạn có hiệu suất tốt hơn. –

+0

Phần lưu trữ phụ trợ chỉ phàn nàn vì tệp phông chữ '.eot' của bạn bị thiếu, vì vậy bạn sẽ thấy phông chữ biểu tượng của bạn sẽ không hoạt động trong Internet Explorer. Nếu bạn sửa chữa thì 'collectstatic' sẽ chạy mà không có vấn đề gì. –

6

Tôi đã có lỗi này tuyên bố một tập tin .css mất tích khi tất cả các file .css của tôi tồn tại, bởi vì tôi tin tưởng tài liệu Heroku:

STATIC_ROOT = 'staticfiles' 

trên nhiễu trắng tài liệu:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 

Việc sửa chữa là tầm thường, nhưng cho đến khi Heroku sửa chữa tài liệu của họ (tôi đã gửi phản hồi), hãy đảm bảo giải pháp ít nhất xuất hiện trong SO.

+0

Điều này hóa ra để khắc phục sự cố của tôi với tệp Heroku và tệp tĩnh khi sử dụng WhiteNoise. Cảm ơn! – mallyvai

4

Tôi chỉ có vấn đề này cùng và cố định nó bằng cách loại bỏ dòng này từ tập tin cài đặt của tôi,

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

tôi có dòng này trên trang tài liệu Heroku ...

+0

Tôi không biết nhưng điều này làm việc cho tôi. Bất cứ ai biết hậu quả? –

+0

Tôi đã có cùng một vấn đề, loại bỏ GzipManifestStaticFilesStore làm việc cho tôi quá, nhưng nó phải là một workaround, tôi muốn sử dụng nén tập tin. –

+0

@BernardParah bạn đang tắt [hỗ trợ nén và bộ nhớ đệm] (http://whitenoise.evans.io/en/stable/django.html#add-compression-and-caching-support) từ whitenoise. Bạn không cần nó để sử dụng whitenoise, nhưng nó là tốt đẹp. – guival

2

Đối với tôi việc sửa chữa là chỉ cần thêm một thư mục 'tĩnh' vào thư mục trên cùng (myapp/static đã làm thủ thuật). Nếu bạn đang thiết lập STATIC_URL nhưng không có thư mục đó đã được tạo, nó sẽ ném một lỗi, mặc dù bạn không sử dụng thư mục đó cho các tệp tĩnh của bạn với whitenoise.

STATIC_URL = '/static/' 
1

Vấn đề ở đây là sử dụng

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

hoặc

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage

sử dụng lưu trữ tập tin tĩnh của Django theo một cách khác hơn runserver làm. Xem tài liệu Django để được giải thích: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict

Tôi tin rằng tệp kê khai được tham chiếu sẽ được tạo khi bạn chạy tập hợp, vì vậy, hãy khắc phục sự cố này tạm thời, nhưng có thể bạn không muốn chạy tập hợp trước khi chạy thử nghiệm đã sửa đổi bất kỳ tệp tĩnh nào. Một giải pháp khác là tắt cài đặt này cho các thử nghiệm của bạn và chỉ chạy nó trong quá trình sản xuất.

0

Nó làm việc cho tôi bằng cách bình luận ra các whitenoise trong settings.py trong sản xuất.

#STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 
#WHITENOISE_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
0

Tôi gặp sự cố tương tự, nhưng với một bước ngoặt.

Tôi đã triển khai trên pythonanywhere. Nếu tôi bật gỡ lỗi Đúng, ứng dụng sẽ chạy tốt. Nhưng nếu một debug lượt False, ứng dụng bị treo với một lỗi rằng với một dòng là tóm tắt

ValueError: Missing staticfiles manifest entry for 'favicons/favicon.ico'

tôi đã thay đổi STATIC_ROOT = 'staticfiles-STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Deleted staticfiles thư mục, sau đó chạy lại python manage.py collectstatic.

Ứng dụng hiện hoạt động tốt

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