python - Django Heroku 静态设置

标签 python django heroku

我有一个 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())

配置文件

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 上会被发现。非常感谢任何帮助!

最佳答案

更改 settings/production.py 中的 STATIC_ROOT

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

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

关于python - Django Heroku 静态设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23622062/

相关文章:

python - ssh 命令需要交互式输入

python - 我想根据外键关系迭代项目并返回它,但只有一个项目返回

django - 从python内部执行Django的sqlsequencereset代码

django - 配置不正确 ("The SECRET_KEY setting must not be empty.")

python - 推送失败的 heroku

python - Python 中 print()[] 的含义是什么?

python - 将级联字典转换为列表列表

ruby-on-rails - Heroku带宽和空间

python - 从 numpy 数组在 matplotlib 中显示多个图像

swift - 无法将 vapor 部署到 heroku(尝试对 CTLS : couldNotFindConfigFile) 使用 pkgConfig 标志时出错