Django Heroku静态设置

3

我有一个Django应用程序,在本地可以正常运行静态文件。当我推送到Heroku时,它会在不同的位置(home/www_dev/www_dev/settings/static)中寻找静态文件。

文件结构:

home
> www_dev
>>> organizations (my app)
>>> static
>>> www_dev
>>>>> settings

base.py配置文件:(使用了《Django两本书》模板)

STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    normpath(join(SITE_ROOT, 'static')),
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

production.py设置(使用Heroku文档)

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

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

wsgi.py

import os
from os.path import abspath, dirname
from sys import path

SITE_ROOT = dirname(dirname(abspath(__file__)))
path.append(SITE_ROOT)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www_dev.settings.production")

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

Procfile

web: gunicorn --pythonpath www_dev www_dev.wsgi -b 0.0.0.0:$PORT

根据其他Stack Overflow的帖子,尝试将内容添加到urls.py中,但未成功:

if not settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.contrib.staticfiles.views.serve', {'document_root': settings.STATIC_ROOT}),
    )

Heroku错误:

-----> Preparing static assets
       Collectstatic configuration error. To debug, run:
       $ heroku run python ./www_dev/manage.py collectstatic --noinput

运行collectstatic的结果:

OSError: [Errno 2] No such file or directory: '/app/www_dev/www_dev/settings/static'

如果我解决不了这个问题,我愿意直接去使用S3,但是使用django-storages和boto将静态(CSS/JS)本地推送到S3有困难。 如果所有媒体都在S3上,那就可以了。非常感谢任何帮助!

1个回答

2

在您的settings/production.py文件中更改STATIC_ROOT

如果您不需要使用其他静态根目录,可以简单地删除该变量,因为它已在setting/base.py中定义。

Heroku文档假定您使用位于project_dir/settings.py中的单个settings.py文件。


当我在 production.py 中删除了所有设置时,它起作用了:从 Heroku 的静态资源配置中删除了 BASE_DIR、STATIC_ROOT、STATIC_URL 和 STATICFILES_DIRS,因为它们已经在 base.py 中定义。 - Amy Lam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接