2010-11-02 17 views
7

Je déplace une application qui utilise django_cms d'un serveur, où tout a fonctionné, à un autre et qui a passé les 4 dernières heures à essayer de trouver la cause de cette erreur. Une suggestion très bienvenue!django_cms ImproperlyConfigured: Erreur lors de l'importation de middleware cms.middleware.media

mod_wsgi (pid=21972): Exception occurred within WSGI script '/var/www/vhosts/compdoctest.com/django/compdoc/django.wsgi'. 
Traceback (most recent call last): 
    File "/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 230, in __call__ 
    self.load_middleware() 
    File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 42, in load_middleware 
    raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e)) 
ImproperlyConfigured: Error importing middleware cms.middleware.media: "No module named media" 

La ligne incriminée est le dernier dans la liste middleware settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'cms.middleware.page.CurrentPageMiddleware', 
    'cms.middleware.user.CurrentUserMiddleware', 
    'cms.middleware.multilingual.MultilingualURLMiddleware', 
    'cms.middleware.media.PlaceholderMediaMiddleware', 
    ) 

Si je retire la dernière ligne, puis le code continue et tombe plus tard en disant que l'article est nécessaire middleware .

J'utilise une version légèrement différente de django, 1.2.1 final sur l'ancien serveur de travail et 1.2.3 final sur le nouveau serveur.

Toutes les choses que j'ai essayé:

  • La même version de django_cms - 2.1.0 beta 3 - qui a été utilisé sur l'ancien serveur
  • La dernière version sur github - 2.1.0. beta2-550 Mettre les cms, MPTT, menus, dossiers d'éditeur dans le
  • app de python importer le
  • googlé (personne ayant le même problème que je peux trouver)
  • fichier middleware directement (pas de problème)

résultat de l'ouverture en python:

python manage.py shell   
Python 2.5.2 (r252:60911, Jan 20 2010, 23:14:04) 
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> import cms.middleware.media 
>>> cms.middleware.media.__file__ 
'/var/www/vhosts/compdoctest.com/django/compdoc/cms/middleware/media.pyc' 
>>> from django.forms.widgets import Media 
>>> import cms.middleware.media 
>>> 

Répondre

4

Merci à mon ami Bartosz Ptaszynski pour moi pointant dans la bonne direction sur celui-ci. C'était un problème de chemin. Ajouté ceci en haut du fichier settings.py et tout a commencé magiquement à fonctionner.

sys.path.insert (0, '/ path_to_app/app /')

Et comme il a fait remarquer:

Exception produite dans le script signifie WSGI que le chemin en cours d'exécution sous le serveur Web était faux c'est un environnement complètement différent de celui shell manage.py

+0

Pouvez-vous donner un peu plus d'explications sur le problème et les solutions? –

+0

Le problème était simplement qu'il ne pouvait pas trouver ce dont il avait besoin sur le chemin. Je pense que le vieux serveur était heureux sans trailing/mais ce serveur était plus pointilleux. Quoi qu'il en soit, l'ajout de la commande sys.path ci-dessus a résolu le problème. – PhoebeB

+0

J'ai eu ce problème et cette solution n'a pas fonctionné pour moi. Cependant, inspiré par cette solution, j'ai également ajouté: 'sys.path.insert (0, '/the/path/to/myapp/lib/python2.6/site-packages/')' et cela a fonctionné - ou au moins passé à un nouvel ensemble de problèmes. –

0

J'ai eu le même problème. Mais comme il ne se produit que lors de l'utilisation mod_wsgi, une autre solution consiste à ajouter le chemin dans la configuration apache (plutôt que de modifier l'intérieur syspath setting.py):

# mod_wsgi settings 
WSGIDaemonProcess name user=user group=group python-path=/app_path/app/:/app_path/lib/python2.6/site-packages/:/app_path/ 
WSGIProcessGroup polykum 

Y compris les packages de site dans le chemin d'accès est également donné dans la exemple de Jon Black.