django在开发中提供的静态文件和生产中的apache。为什么不使用同一文件夹?

时间:2014-01-01 05:24:31

标签: python django apache

如果这个问题是概念性的,请提前道歉,但我只是想确保我没有做一些安全风险或其他意义上的问题。我的信念是django惯例是多余的,如果不是这样,我的理解是错误的。

当我在django(单独的机器到生产)中开发时,我有django服务所有静态文件,我把它放在项目目录中名为“static”的文件夹中。在我的DEBUG = False的生产机器上,我设置Apache来提供来自SAME目录的静态文件,并让Apache从这个目录中关闭mod_python,并在httpd.conf虚拟主机中为apj所服务的django关闭以下内容:< / p>

# J1.7 turn off mod_python for the static direcotyr of binge and any
# url that ends in gif, jpg or png
<Location '/static/'>
    SetHandler None
</Location>

# The images to be served are in here
Alias /static/ /www/myserver/myproject/myproject/static/
<Directory /www/myserver/myproject/myproject/static>
    AllowOverride None
    Options -Indexes MultiViews FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>

在开发服务器上,我可以提供静态文件,我使用:

# files to be served by production server are here
STATIC_ROOT = ''

# this is prefixed to any reference of a static file. the documentation says this
# should be the absolute URL of where the static files are served when on the 
# production server, and just the word /static/ for the development server NUTS!
STATIC_URL = '/static/'

# files to be served by development server are here
STATICFILES_DIRS = (
    "/www/myserver/myproject/myproject/static",
)

现在,Django尝试强制开发静态目录和生产静态目录位于不同的位置,因为将STATIC_ROOT设置为STATICFILES_DIRS中的任何目录都会标记错误。

我不明白为什么这是强迫的。而且`STATICFILES_DIRS'是一个元组,假设你将在你的网站上有静态文件/这是我也不明白的东西,因为django页面不能引用相对的图像文件目录无论如何。它必须在某个文件夹中确定为django的服务地点,你必须使用

<script src="{% static "javascript/jquery-1.8.2.min.js" %}"></script>

而不是

<script src="javascript/jquery-1.8.2.min.js"></script>

我不了解将静态文件放在整个项目目录中的优点,然后运行manage.py collect static将它们收集到一个单独的文件夹中,以便sftp到某个位置(可能在您的项目文件夹中) )由阿帕奇提供服务。

1 个答案:

答案 0 :(得分:0)

这是一种事实,即默认情况下,HTTPd构造URL以镜像底层文件系统。使用一组Alias指令将各种静态资产子目录移植到URL结构中当然是可行的,而且我在几次这样做了。在第一次部署时需要做更多的工作,但是对项目的进一步修订只需要很少的配置更改,并且没有额外的部署步骤。