2011-04-07 56 views
3

至少不像其他人那麼容易。它不是建立簡單的基於一個-DIR靜態文件位置的問題..Django StaticFiles APP和Wsgi

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相同的網址不起作用。並且這個文件位於myproject/apps/myapp/myapp/static/css/main.css中,雖然默認的靜態目錄是var/htdocs/static =)

據我所知,在設置中使用StaticFiles應用程序進行重寫。 py

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虛擬主機與默認位置一起工作..並設置爲「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,並嘗試通過你自己。它必須工作

ps。 (btw bin/django需要公佈爲bin/django.wsgi和etc/apache.conf是爲apache生成的vhost)

如果有人試圖用wsgi手動啓動這個「Starter」然後你就會明白一切=)

編輯:關於WSGI如何能理解他需要從Django中設置搜索靜態文件除了默認位置的任何信息,真的是感謝=)

+0

你指出你的apache配置中的別名到/ your/path/to /靜態的/? – 2011-04-07 07:33:06

+0

這個呢? http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic這個東西是如何工作的?它可以從多個位置收集靜態文件? – holms 2011-04-07 13:21:42

+1

同樣,Apache(或任何其他網絡服務器)只能向Apache配置中添加別名的服務器提供靜態文件,該配置指向託管靜態文件的位置。是的,您應該使用collectstatic命令將所有靜態文件收集到一個位置(爲了方便或bcs,您不想將許多別名設置到不同的位置)。 staticfiles應用程序主要用於幫助您在本地開發服務器上進行開發,而無需執行像collectstatic或將Alias添加到服務器配置之類的操作。在生產中,唯一的用法是在模板中使用STATIC_URL。 – 2011-04-08 02:49:30

回答

1

有某種覆蓋像Django的WSGI與做的沒辦法..

有在Django 「manage.py collectstatic」 從將所有的文件大統領STATIC_DIR列表(在settings.py中)到主靜態目錄..實際上這個命令只是複製所有那些目錄中的文件,就是這樣=)

想知道很多,我怎麼能自動複製在該目錄中的任何文件將被更新..同樣的事情像monitor.py自動wsgi重新加載時,源被修改...

1

WSGI有什麼無論做什麼與服務靜態文件。這在Django的部署文檔中已經清楚地說明了 - 正如Torsten在評論中所建議的那樣,您需要將Apache指向您的靜態文件,可能是通過別名。

我必須說,雖然這個項目看起來非常狡猾。手動添加一大堆雞蛋到sys.path不是正確的方式去處理事情 - 更好的方法是使用像virtualenv這樣的東西,它可以爲你管理所有的東西。

+0

「collectstatic」呢? – holms 2011-04-07 13:22:02

+0

怎麼樣?這是一個將您的靜態文件收集到一個地方的管理命令,然後由Apache直接提供。 – 2011-04-07 14:08:09

+0

這就是我需要的東西。從多個靜態目錄收集數據... – holms 2011-04-07 14:49:43