2013-12-08 49 views
0

我想結合django管道和Django存儲自動上傳壓縮文件到亞馬遜S3。Django存儲和Django管道 - 只上傳壓縮的靜態文件

它一直都在失敗。它正在上傳所有可能的文件,或者它正在上傳空文件,或者在啓用CachedFileFinder時發生錯誤。

我有點卡住了,不知道該怎麼做。

custom_storages.py

# -*- coding: utf-8 -*- 

from django.contrib.staticfiles.storage import CachedFilesMixin 
from pipeline.storage import PipelineMixin, PipelineCachedStorage 
from storages.backends.s3 import S3Storage 
from storages.backends.s3boto import S3BotoStorage 

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage): 
    pass 

settings.py

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', 
    'django.contrib.admindocs', 
    'django.contrib.webdesign', 
    'django.contrib.humanize', 
    'django.contrib.sitemaps', 
    'django.contrib.flatpages', 

    # External libs 
    'storages', 
    'pipeline', 
    'endless_pagination', 
    'easy_thumbnails', 
    'mptt', 
    'south', 
    #'debug_toolbar', 
    'rest_framework', 
    'memcache_status', 
    'parsley', 
    'crispy_forms', 
    'crispy_forms_foundation', 

    # Apps 
    'core', 
    'adverts', 
    'places', 
    'images', 
    'categories', 
) 


DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage' 
STATICFILES_STORAGE = 'core.core_storage.S3PipelineStorage' 


MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 
MEDIA_URL = '/media/' 
STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static_root') 

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'), 
) 

STATICFILES_FINDERS = (
    'pipeline.finders.AppDirectoriesFinder', 
    'pipeline.finders.FileSystemFinder', 
    'pipeline.finders.PipelineFinder', 
    #'pipeline.finders.CachedFileFinder', 
) 


PIPELINE_CSS = { 
    'base': { 
     'source_filenames': (
      'css/style.css', 
     ), 
     'output_filename': 'css/core.css', 
    }, 

} 

PIPELINE_JS = { 
    'base': { 
     'source_filenames': (
      'js/libs/jquery-1.10.2.js', 
      'foundation/bower_components/foundation/js/foundation.js', 
      'foundation/js/app.js', 
      'js/jquery.wookmark.js', 
      'js/libs/endless-pagination.js', 
      'js/libs/jquery.autosize-min.js', 
      'js/libs/global.js', 
     ), 
     'output_filename': 'js/jquery.js', 
    }, 
} 

回答

0

CachedFileFinder錯誤是非常正常的,特別是如果使用第三方CSS,因爲它試圖解析CSS @include報表和改造URL到緩存版本。你必須非常小心CSS include的格式。

Django也需要上傳所有的文件,甚至是未壓縮的文件,因爲它們仍然可能被它們的非緩存名稱引用。從理論上講,你可以擺脫這種限制,但只要忍受這個限制就可能更容易。