Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Dévelopement et déploiement: URLConf et chemins différents

#1 06-10-2010 10:25:21

bejazzy
Membre
Inscription : 11-08-2010
Messages : 31

Dévelopement et déploiement: URLConf et chemins différents

Bonjour,

Mon statut: débutant

Je suis en train de faire un site sous Django avec des contenus personnels et
professionnels. J'utilise le serveur "natif" Django avec la commande
'./manage.py runserver' pour tester en local mes templates, mes URLs, ...
Quand je suis satisfait, j'essaie sur mon serveur Apache locale configuré
par mes soins. J'envoie ensuite mes modifications chez mon hébergeur.

J'ai un soucis mineur, mais qui m'embête grandement, c'est mon côté
casse-couille de m'entêter à résoudre des problèmes non-bloquants. J'ai des
différences entre mon fichier 'urls.py' de ma partie "développement" et
"déploiement". Je m'explique, sur mon serveur Apache et mon hébergeur, j'ai
crée un répertoire 'home' dans /www qui contient un script CGI qui me permet
de lire mon 'settings', de lui filer quelques chemins et de déployer la bête.
Les chemins dans mes templates sont:
/home/
/home/about/
/home/note/
et les expressions régulières dans URLConf sont:
r'^$'
r'^about/$'
r'^note/$'

Et que ce soit mon Apache local ou via l'hébergeur, j'ai juste à
entrer:
http://localhost/home/
ou
http://nomdedomaine.org/home/

Mon objectif était de ne pas mettre mon site à la racine '/www' puisque je
compte déployer plusieurs projets '/www/mon_future_projet' par exemple.

Par contre, quand je 'runserver', mes URLs doivent être:
r'^home/$'
r'^home/about/$'
r'^home/note/$'
si je souhaite que mes chemins dans mes templates soient valides.

Je cherche et n'ai toujours pas trouvé la solution. Soit je dois configurer un
truc dans le 'settings' ou autres côté "développement" OU "déploiement" qui me
permettrai de palier à ce problème. Soit j'ai loupé un truc dans la conception
d'un projet Django et m'y suis pris comme un manche dans l'écriture des
chemins dans mes templates ou dans mes URLConfs.

J'espère avoir été assez clair et merci de votre attention !

Damien G.

Hors ligne

#2 06-10-2010 10:33:30

franck@netandco.net
Membre
Inscription : 11-08-2010
Messages : 8

Re : Dévelopement et déploiement: URLConf et chemins différents

Bonjour

Pas sûr de comprendre ton problème mais as tu regardé le templatetags url ?
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

Si ton problème est relatif au chemin des fichiers templates, ils
doivent être absolus, pour gérer le fait que le path n'est pas le même
en fonction de la machine sur laquelle ton projet est executé tu peux
faire quelque chose comme celà dans tes settings :

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
     # Don't forget to use absolute paths, not relative paths.
     os.path.join(PROJECT_DIR, 'templates'),
)

On 06/10/2010 11:25, Damien Garaud wrote:
> Bonjour,
>
> Mon statut: débutant
>
> Je suis en train de faire un site sous Django avec des contenus personnels
> et
> professionnels. J'utilise le serveur "natif" Django avec la commande
> './manage.py runserver' pour tester en local mes templates, mes URLs, ...
> Quand je suis satisfait, j'essaie sur mon serveur Apache locale configuré
> par mes soins. J'envoie ensuite mes modifications chez mon hébergeur.
>
> J'ai un soucis mineur, mais qui m'embête grandement, c'est mon côté
> casse-couille de m'entêter à résoudre des problèmes non-bloquants.
> J'ai des
> différences entre mon fichier 'urls.py' de ma partie "développement" et
> "déploiement". Je m'explique, sur mon serveur Apache et mon hébergeur,
> j'ai
> crée un répertoire 'home' dans /www qui contient un script CGI qui me
> permet
> de lire mon 'settings', de lui filer quelques chemins et de déployer la
> bête.
> Les chemins dans mes templates sont:
> /home/
> /home/about/
> /home/note/
> et les expressions régulières dans URLConf sont:
> r'^$'
> r'^about/$'
> r'^note/$'
>
> Et que ce soit mon Apache local ou via l'hébergeur, j'ai juste à
> entrer:
> http://localhost/home/
> ou
> [url]http://nomdedomaine.org/home/[/url]
>
> Mon objectif était de ne pas mettre mon site à la racine '/www' puisque
> je
> compte déployer plusieurs projets '/www/mon_future_projet' par exemple.
>
> Par contre, quand je 'runserver', mes URLs doivent être:
> r'^home/$'
> r'^home/about/$'
> r'^home/note/$'
> si je souhaite que mes chemins dans mes templates soient valides.
>
> Je cherche et n'ai toujours pas trouvé la solution. Soit je dois
> configurer un
> truc dans le 'settings' ou autres côté "développement" OU
> "déploiement" qui me
> permettrai de palier à ce problème. Soit j'ai loupé un truc dans la
> conception
> d'un projet Django et m'y suis pris comme un manche dans l'écriture des
> chemins dans mes templates ou dans mes URLConfs.
>
> J'espère avoir été assez clair et merci de votre attention !
>
> Damien G.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 06-10-2010 10:43:52

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Dévelopement et déploiement: URLConf et chemins différents

Je ne sais pas comment a été configuré ton serveur, mais si tu configure le
prefixe /home dans la configuration Apache tu ne devrais pas avoir à
modifier ton urlConf.

Tu parles de CGI, est-ce que ton serveur tourne en FastCGI ? Est-il possible
de le faire tourner en WSGI ?
Qu'elle est la configuration actuelle de ton script CGI ?

Hors ligne

#4 06-10-2010 12:43:30

bejazzy
Membre
Inscription : 11-08-2010
Messages : 31

Re : Dévelopement et déploiement: URLConf et chemins différents

Merci pour la réactivité !! Je vais essayer d'être plus clair.

Mon serveur local (sur ma machine perso) sert juste à tester mon code sous
http://localhost/home/ La configuration est sensiblement la même chez mon
hébergeur modulo les chemins vers les templates, media et code source et
tout fonctionne bien. J'ai essayé le mode WSGI en local qui ne m'a pas
réussi. Et je ne suis pas sûr qu'il soit dispo chez mon hébergeur (à vrai
dire, j'ai pas vérifié). J'utilise donc un script CGI pompé de:
http://code.djangoproject.com/attachment/ticket/2407/django.cgi
puis modifié (chemins, tout çaaa...)

avec un fichier .htaccess dans le répertoire '/www/home/' qui contient:

   Options +ExecCGI
   AddHandler cgi-script .cgi
   RewriteEngine on
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ django.cgi/$1 [L]

et le répertoire qui contient les fichiers CSS, images, ... bêtement nommé
'media'. Le serveur retrouve ses petits quand je pointe vers mes CSS:
   <link rel="stylesheet" href="/home/media/css/content.css"
type="text/css"/>
ou quand je fais un lien vers un autre page:
   <a href="/home/about/">À propos</a>

Et mon 'urls.py' est configuré de la sorte:
   urlpatterns = patterns(
         'django.views.generic.simple',
         (r'^$', 'direct_to_template', {'template': 'index.html'}),
         (r'^about/$', 'direct_to_template', {'template': 'about.html'}), )

Donc pas besoin de mettre r'home/$' ou r'home/about/$'. Et tout marche bien.
Je n'ai pour l'instant pas beaucoup de 'views' puisque pas d'application et
'models.py' associés.

Néanmoins, quand je change de machine, je n'ai pas toujours les droits et
n'ai pas forcément le serveur Apache en local qui me permet de tester mes
modifications. Je lance donc le bien pratique './manage.py runserveur' et
ouvre mon navigateur web à l'adresse http://127.0.0.1:8000/
Je me retrouve bien sur ma page d'accueil 'index.html' puisque le pattern
est cohérent. Mais quand je clique pour aller sur la page 'À propos' à
l'adresse en dure dans mon fichier HTML '/home/about/', le pattern n'est pas
reconnu car c'est r'^about/$' et non r'^home/about/$' qui est précisé dans
mon URLConf. Je dois avoir donc deux fichiers 'urls.py' différents:
  - quand je fais runserver avec le ^home/ avant chaque chemin et pattern
  - quand je déploie sur le serveur Apache sans le ^home avant chaque chemin
que je gère avec deux branches différentes avec mon gestionnaire de
versions.

Peut-être que mes chemins bruts dans mes templates '/home/monchemin' ne sont
pas judicieux. En effet, si je change le nom du répertoire '/www/home', je
dois changer le chemin dans chaque fichier HTML.

Le templatetag url n'est pas une mauvaise idée, je vais voir et fouiller.

Rémy à dit: "mais si tu configure le prefixe /home dans la configuration
Apache [...]"
cela doit être une chose que je ne sais pas faire, ou pas correctement (un
truc à modifier dans mon .htacces??).

Merci encore.

Damien G.

Hors ligne

#5 06-10-2010 13:04:29

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Dévelopement et déploiement: URLConf et chemins différents

Bonjour,

Pour ton problème il y a deux solutions :

- Soit tu installes considère que ton projet est installé dans home/ mais
que l'application ne gère pas le home car tout commence par ce prefixe. Dans
ce cas, il faut que tes liens dans tes pages tiennent pas compte du home/ et
lorsque tu es en local tu n'as pas de /home non plus.

Tu peux utiliser SITE_URL dans ton settings pour définir la racine et
l'utiliser dans tes templates en l'ajoutant à un context_processor

SITE_URL = 'http://localhost:8000/' dans un cas
SITE_URL = 'http://ndd.com/home/' dans l'autre cas

- Soit tu considères que le home/ fait partie de l'url et qu'il doit être
traité par Django. Dans ce cas il faut que tu modifie ton fichier .htaccess
et qu'il doit se trouver dans le répertoire www/

   Options +ExecCGI
   AddHandler cgi-script .cgi
   RewriteEngine on
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(home/.*)$ django.cgi/$1 [L]

Ce qu'il faut bien comprendre c'est que soit l'url est traité par Django
dans ce cas elle est aussi traité en local avec python manage.py runserver ,
soit elle n'est pas traité par Django et il faut trouver un moyen pour
donner aux urls absolue la racine du projet.

Ceci dit, CGI est la pire des solutions pour héberger un projet Django car
cela nécessite de lancer l'application Django à chaque requête de page. Ce
qui engendre un site très très lent.

Si tu utilises WSGI avec Apache et mod_wsgi, tu auras quelques processus
Django lancé au lancement d'Apache avec un temps de réponse plus efficace.
Tu peux faire la même chose avec FastCGI.

Sachant que la meilleure solution pour hébergé du Django à l'heure actuelle
semble être WSGI et Gunicorn. Vérifie auprès de ton hébergeur.

Cordialement,

Rémy

Hors ligne

#6 06-10-2010 13:40:25

bejazzy
Membre
Inscription : 11-08-2010
Messages : 31

Re : Dévelopement et déploiement: URLConf et chemins différents

Excellent !

Merci pour toutes ces explications et les différentes possibilités. Je
comprends déjà mieux ! J'étais dans une situtation "bâtarde" dans laquelle
mon URLConf, ma configuration Apache et les liens dans les templates
n'étaient pas cohérents.

Je pense choisir la première solution que me semble la plus adaptée.

En ce qui concerne le script CGI, c'est la seule information que j'ai réussi
à choper pour déployer mon site chez un hébergeur bien connu et peu coûteux.
Y'a qu'à voir la version de Python: 2.4.4 !! Ils font quand même plus
d'efforts en ce qui concerne les abonnements plus honéreux. Mais je vais
quand même me renseigner pour WSGI. Il me semble avoir lu que FastCGI
n'était pas dispo pour mon offre.

En tout cas, merci pour tous ces conseils. Aurais-tu des liens sur la
configuration Apache WSGI/FastCGI + Django? La difficulté pour moi c'est la
configuration chez l'hebergeur. Sur ma bécane, je peux configurer, ajouter
ou enlever les 'mod' Apache comme je veux et trifouiller les fichiers de
configurations. C'est déjà plus difficile chez mon hébergeur, je n'ai la
main sur rien, à part mes fichiers via connexion FTP ! Alors quand tutoriels
et autre blogs ou Wiki écrivent: "modifier le fichier
/etc/apache2/site-available/default et relancer avec /etc/init.d/apache2
restart", ben c'est juste pas possible.

Encore merci.

Cordialement,
Damien G.

Hors ligne

  • Accueil
  • » Django-fr
  • » Dévelopement et déploiement: URLConf et chemins différents

Pied de page des forums