2009-08-28 15 views
1

J'essaye de déployer mon application Django en production sur un serveur partagé.Confusion sur le chemin Python dans le shell Python vs serveur FCGI: Pourquoi sont-ils différents?

Il semble que je vais avoir des problèmes avec le chemin Python parce que je reçois l'erreur du serveur: Aucun module nommé products.models

Cependant, quand je vais à la racine de l'application et de l'exécution le shell que les modules chargent très bien.

'>>> from products.models import Answer 
'>>> import sys 
'>>> sys.path 
['/home/SecretUserAcct/django-projects/review_app', ...] 

Le chemin ci-dessus pointe vers la racine de l'application Django.

Je suppose que c'est un problème avec le chemin Python, mais je ne suis pas sûr de ce qui ne va pas.

Voici le fichier fcgi: $ cat ~/public_html/django.fcgi

#!/usr/local/bin/python2.6 
import sys 
import os 

# Insert PYTHONPATH values here, including the path to your application 
#sys.path.insert(0, '<path_to_your_app_directory>') 
sys.path.insert(0, '/home/SecretUserAcct/django-projects/') 
# Provide the location of your application's settings file. 
os.environ['DJANGO_SETTINGS_MODULE'] = 'review_app.settings' 

from django.core.servers.fastcgi import runfastcgi 
runfastcgi(method = "threaded", daemonize = "false", maxchildren=3, minspare=0, maxspare=1) 

Quelle compréhension que je manque ici?

+0

Pouvez-vous également afficher la valeur de 'Answer .__ file__' dans le premier shell? –

+0

>>> de products.models importer Réponse >>> Réponse .__ FILE__ retraçage (le plus récent appel dernier): Fichier "", ligne 1, dans AttributeError: objet type 'réponse' n'a pas d'attribut '__file__' – BryanWheelock

Répondre

0

Je suis un peu confus - si ce que vous avez dans le chemin dans le cas de travail est:

'/home/SecretUserAcct/django-projects/review_app' 

-à-dire, y compris l'application, pourquoi êtes-vous à la place, dans le second cas de non-travail, insertion

'/home/SecretUserAcct/django-projects/' 

SANS l'application? Vous aurez sûrement besoin de différentes formes d'importation en fonction de ce que vous avez choisi de mettre sur votre sys.path, non?

+0

Vous faites un point valide, la raison pour laquelle il est configuré est due à ces instructions de mon hôte partagé: Le est l'emplacement de votre dossier d'application Django de # 1. Ce n'est pas l'emplacement du dossier de l'application lui-même, mais plutôt le dossier qui contient le dossier de l'application. Par exemple, si mon dossier d'application est nommé "mysite" et que je l'ai placé dans un dossier nommé "python", alors je veux pointer vers/python, pas vers/mysite. La raison a à voir avec la façon dont Python charge les modules. – BryanWheelock

+0

@Brian, alors vous devrez modifier vos instructions d'importation en conséquence, pour utiliser explicitement le nom de votre application. –

0

Le serveur de développement Django et le shell manage.py placent pour vous le répertoire courant (le répertoire que vous avez exécuté manage.py) sur votre chemin python. Lors de l'exécution en mode production, vous devrez ajuster votre chemin en conséquence si vous avez du code qui repose sur cette fonctionnalité.

Questions connexes