3

这不像其他人那么简单的问题……至少。设置简单的基于单目录的静态文件位置不是问题..

https://bitbucket.org/sirex/django-starter/src

这里有一个有趣的项目.. 这个项目使用分发和构建来制作整个项目和 django 与一个目录中的模块。您可以轻松地从开发模式迁移到生产模式等等。您所需要的只是重命名目录,然后在其中输入“make”,就是这样=)那里有手册...

适用于 python 服务器且不适用于 apache mod_wsgi 的情况:默认静态文件位置为:“var/htdocs/static”。这可以被一个静态目录位置覆盖,例如apps/myapp/myapp/static/。这适用于 python webserver,但不适用于 wsgi/apache。wsgi 除了默认目录之外什么都看不到.. 示例:http://localhost:8000/static/css/main.css有效,但与 apache 相同的 url 无效。这个文件位于 myproject/apps/myapp/myapp/static/css/main.css 虽然默认的静态目录是 var/htdocs/static =)

据我了解,在 settings.py 中使用 StaticFiles 应用程序进行了这种覆盖

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'htdocs', 'static')
STATICFILES_DIRS = (
  os.path.join(BUILDOUT_DIR, 'project', 'static'), # <-- why "project" and not "apps" I don't know X_X
)

也许这个不正确,我不知道,但使用 py-server 可以。apache vhost 使用默认位置.. 并设置为“var/htdocs/static”。

也许问题出在 wsgi 脚本中?

#!/usr/local/bin/python2.6

import os,sys
sys.path[0:0] = [
    '/usr/local/lib/python2.6/site-packages/',
    '/www/webapp/visimes/eggs/PIL-1.1.7-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/South-0.7.3-py2.6.egg',
    '/www/webapp/visimes/eggs/django_annoying-0.7.6-py2.6.egg',
    '/www/webapp/visimes/eggs/coverage-3.4-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/django_debug_toolbar-0.8.4-py2.6.egg',
    '/www/webapp/visimes/eggs/django_extensions-0.6-py2.6.egg',
    '/www/webapp/visimes/eggs/django_test_utils-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipdb-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipython-0.10.1-py2.6.egg',
    '/www/webapp/visimes/eggs/djangorecipe-0.21-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.recipe.egg-1.3.2-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.buildout-1.5.2-py2.6.egg',
    '/www/webapp/visimes/eggs/BeautifulSoup-3.2.0-py2.6.egg',
    '/www/webapp/visimes/eggs/setuptools-0.6c12dev_r88795-py2.6.egg',
    '/www/webapp/visimes/parts/django',
    '/www/webapp/visimes',
    '/www/webapp/visimes/project', # <-- this one need for monitor.py which i put in there
    '/www/webapp/visimes/apps/portal', # <-- startapp.sh script some how forgot to add this dir, it's my default app dir, which must be generated with startapp.sh and added in here..
    ]

import djangorecipe.wsgi

if __name__ == '__main__':
    djangorecipe.manage.main('project.development')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.development'

import monitor
monitor.start(interval=1.0)

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我自己添加了最后 4 行。因为我无法启动 apache.. 我猜 djangorecipe.wsgi 应该使用 staticFile 覆盖来处理其他所有事情.. 无论如何,如果你在 linux 或 mac 上,请检查那个包,然后自己尝试一下。它必须工作

附言。(顺便说一句,bin/django 需要复制为 bin/django.wsgi 和 etc/apache.conf 是为 apache 生成的 vhost)

如果有人尝试使用 wsgi 手动启动这个“Starter”,我真的很高兴......那么你就会明白一切。=)

编辑:任何关于 WSGI 如何理解他需要从 django 设置的默认位置搜索静态文件的位置的任何信息,都非常感谢 =)

4

3 回答 3

2

官方 mod_wsgi 网站上有很多文档可以帮助您了解如何使用它。这包括如何设置它以提供静态媒体文件。看:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide http://code.google.com/p/modwsgi/wiki/配置指南

于 2011-04-07T10:21:48.363 回答
1

WSGI与提供静态文件无关。这在 Django 部署文档中都有明确的介绍——正如 Torsten 在评论中建议的那样,您需要将 Apache 指向您的静态文件,可能通过别名。

我必须说这个项目看起来很狡猾。手动添加一堆鸡蛋sys.path并不是正确的方法——更好的方法是使用类似 virtualenv 的东西,它可以为你管理所有这些。

于 2011-04-07T08:30:52.283 回答
1

没有办法像 django 那样对 WSGI 进行某种覆盖。

django“manage.py collectstatic”中有一个很棒的命令,它将所有文件从 STATIC_DIR 列表(在 settings.py 中)放置到主静态目录。事实上,这个命令只是从所有这些目录中复制文件,就是这样 =)

很高兴知道,当该目录中的任何文件将被更新时,我怎样才能使这种复制自动进行..与monitor.py一样,用于在修改源时自动重新加载wsgi ...

于 2011-04-11T05:31:43.397 回答