django+uwsgi部署中的静态文件加载失败探讨(django1.4以上版本)

django+uwsgi部署中静态文件加载失败,这是一个大坑。(本文探讨django1.4以上版本,因为1.3以前有ADMIN_MEDIA_PREFIX这个大坑,本文不作讨论)

首先要理解django中,关于静态路径的分析:

一、为什么调试环境没问题,部署到生产环境就有问题?

调试环境的运行命令:

python manage.py runserver

runserver这个命令知道所有的静态文件在哪里,因为runserver是django的内置命令,而uwsgi不是。

在生产环境中,uwsgi需要用配置文件ini或用命令行的设定static-map

命令行中需要加入:

uwsgi  其它配置 --static-map /static=/srv/django/static

而配置文件ini中需要加入:

static-map = /static=/项目目录/static

如果uwsgi没有设置这个路径,那么它就不知道静态文件在哪里。

二、如果uwsgi已经设置了static-map,但还是有问题,原因?

因为static-map对应的静态目录里,没有静态文件。

这是因为在行动uwsgi前,没有把django静态文件收集到uwsgi指定的静态目录里。

以下代码设置了django开发的应用项目(APP)文件的的静态路径:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'app1/static'),
    os.path.join(BASE_DIR, 'app2/static'),
]

而django的管理后台的静态路径在:

/usr/local/lib/python3.X/site-packages/django/contrib/admin/static/admin/

uswgi在启动前要把有的有以上两种的静态文件收到到STATIC_ROOT中:

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

而静态文件的URL根目录为:

STATIC_URL = '/static/'

重点!!!:

所以,在项目根目录下运行以下命令,可以把STATICFILES_DIRS与管理admin的静态文件复制到STATIC_ROOT:

python manage.py collectstatic

问题解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值