相关疑难解决方法(0)

如何使用django-storages和Amazon S3设置Django项目,但是对于静态文件和媒体文件有不同的文件夹?

我正在配置一个Django项目,该项目使用服务器文件系统来存储应用程序静态文件(STATIC_ROOT)和用户上传的文件(MEDIA_ROOT).

我现在需要在亚马逊的S3上托管所有内容,所以我为此创建了一个存储桶.使用django-storagesboto存储后端,我设法收集静态上传到S3斗:

MEDIA_ROOT = '/media/'
STATIC_ROOT = '/static/'

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'KEY_ID...'
AWS_SECRET_ACCESS_KEY = 'ACCESS_KEY...'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

然后,我遇到了一个问题:MEDIA_ROOT并且STATIC_ROOT没有在存储桶中使用,因此存储桶根目录包含静态文件和用户上载的路径.

那么我可以设置:

S3_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL + STATIC_ROOT
MEDIA_URL = 'S3_URL + MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)

并在模板中使用这些设置,但在S3中存储时,静态/媒体文件没有区别django-storages.

怎么做到这一点?

谢谢!

django amazon-s3 static-files django-settings django-storage

90
推荐指数
3
解决办法
3万
查看次数

Heroku - 处理Django应用程序中的静态文件

我在heroku中有一个项目(myapp),但我无法让静态文件正常工作.我正在关注这篇博文.

Procfile看起来像这样:

web: python myapp/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT myapp/settings.py
Run Code Online (Sandbox Code Playgroud)

settings.py:

...

STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

STATICFILES_DIRS = (
    # I have the static folder inside my app and not inside the project
    os.path.join(PROJECT_PATH, 'cesar/static'),
)

...
Run Code Online (Sandbox Code Playgroud)

使用heroku restart它重新启动时heroku logs显示:

...
Copying ...

114 static files copied to '/app/myapp/staticfiles'.
...
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我heroku run ls -l myapp/看不到staticfiles文件夹:

-rw------- 1 u5605 5605    0 …
Run Code Online (Sandbox Code Playgroud)

django static heroku

35
推荐指数
1
解决办法
2万
查看次数

在Heroku上为Django静态文件添加expire头

我正在尝试优化我的网页,并且无法在我的静态文件上设置过期日期标题.

我正在运行django-1.5,python-2.7.3.

这是我在settings.pyso中的缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(PROJECT_ROOT, 'cache/'),
    }
}

CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 5 * 60
CACHE_MIDDLEWARE_KEY_PREFIX = ''

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

我在settings.py中的静态文件设置:

import os.path

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(PROJECT_DIR, '..'))

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles/')

STATIC_URL = '/static/'

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

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
Run Code Online (Sandbox Code Playgroud)

我发现的最接近的建议是在这里,但我无法修改Heroku上的.htaccess文件.

任何帮助是极大的赞赏.谢谢!

django caching heroku

3
推荐指数
1
解决办法
2435
查看次数