2011-04-07 3 views
3

Ce n'est pas si facile que d'autres questions .. au moins. ce n'est pas un problème de configuration simple emplacement des fichiers statiques à base d'un dir-..Django StaticFiles APP et Wsgi

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

Il y a un tel projet intéressant ici .. celui-ci utilise la distribution et buildout pour faire ensemble du projet et django avec des modules dans un dir. vous pouvez migrer du mode dev au mode production facile et etc .. tout ce dont vous avez besoin est juste de renommer dir, et tapez "make" dedans, et c'est tout = 0 il y a manuel là-dedans ...

Situation qui fonctionne avec serveur python, et ne fonctionne pas avec apache mod_wsgi: L'emplacement des fichiers statiques par défaut est: "var/htdocs/static". Cela peut être remplacé par un emplacement de répertoire statique, par exemple apps/myapp/myapp/static /. Cela fonctionne avec python webserver mais ne fonctionne pas avec wsgi/apache. wsgi ne peut pas voir quelque chose à part répertoire par défaut .. par exemple: http://localhost:8000/static/css/main.css fonctionne mais avec Apache même URL ne fonctionne pas. et ce fichier se trouve dans myproject/apps/monapp/myapp/static/css/main.css bien que le répertoire statique par défaut soit var/htdocs/static =)

Dans la mesure où je comprends ce remplacement effectué avec l'application StaticFiles dans les paramètres. 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 
) 

peut-être celui-ci est incorrect, je ne sais pas, mais avec py-server cela fonctionne. Apache vhost fonctionne avec l'emplacement par défaut .. et est configuré sur "var/htdocs/static".

Peut-être que le problème est dans le script 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() 

J'ai ajouté les 4 dernières lignes par moi-même. parce que je ne pouvais pas démarrer Apache .. Je devine que djangorecipe.wsgi devrait gérer tout le reste avec staticFile override .. de toute façon s'il vous plaît, consultez ce paquet, si vous sur Linux ou mac, et l'essayer par vous-même. il doit fonctionner

ps. (btw bin/django besoin de dubliquer comme bin/django.wsgi et etc/apache.conf est généré vhost pour apache)

Je serais vraiment apriciated si quelqu'un essayait de lancer ce "Starter" manuellement avec wsgi .. . alors vous comprendriez tout =)

Edit:. Toute information sur la façon dont peuvent WSGI comprendre où il doit rechercher des fichiers statiques en dehors emplacement par défaut de paramètres de django, est vraiment apprécié =)

+0

Vous avez fait un alias de votre configuration apache au serveur de fichiers statiques dans/votre/chemin/vers/statique/? –

+0

qu'en est-il de celui-ci? http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic comment cette chose fonctionne? il peut collecter des fichiers statiques à partir de plusieurs endroits? – holms

+1

Encore une fois, Apache (ou tout autre serveur Web) ne peuvent servir des fichiers statiques si vous ajoutez un alias à la configuration d'Apache qui pointe vers l'emplacement qui héberge vos fichiers statiques. Et oui, vous devez utiliser la commande collectstatic pour recueillir tous vos fichiers statiques en un seul endroit (pour des raisons pratiques ou bcs. Vous ne voulez pas définir de nombreux Alias ​​à différents endroits). L'application staticfiles est principalement là pour vous aider à développer sur le serveur de développement local sans faire quelque chose comme collectstatic ou en ajoutant un alias à votre configuration de serveur. En production, la seule utilisation est d'avoir STATIC_URL dans vos templates. –

Répondre

1

Aucun moyen d'avoir une sorte de passer outre comme django fait avec WSGI ..

il y a une grande commande dans django "collectstatic manage.py" qui place tous les fichiers de Liste STATIC_DIR (dans settings.py) vers le répertoire statique principal .. en fait, cette commande copie simplement les fichiers de tous ces répertoires et c'est tout =

Je serais ravi de savoir comment faire pour que cette copie soit automatique quand tout fichier dans ce répertoire serait mis à jour .. même chose comme monitor.py pour reload automatique wsgi lorsque la source est modifiée ...

1

WSGI n'a rien quoi faire avec des fichiers statiques de service. Tout ceci est clairement couvert dans la documentation de déploiement de Django - comme Torsten le suggère dans les commentaires, vous devrez pointer Apache sur vos fichiers statiques, probablement via un alias.

Je dois dire cependant que ce projet semble très douteux. Ajouter manuellement une charge d'oeufs à sys.path n'est pas la bonne façon de faire les choses - un bien meilleur moyen serait d'utiliser quelque chose comme virtualenv, qui gère tout cela pour vous.

+0

Qu'en est-il de "collectstatic"? – holms

+0

Qu'en est-il? C'est une commande de gestion qui rassemble vos fichiers statiques en un seul endroit, qui est ensuite directement servi par Apache. –

+0

c'est ce dont j'ai besoin en fait. pour recueillir des données à partir de plusieurs dirs statiques ... – holms

Questions connexes