2012-06-21 1 views
1

J'avais des critères collectifs.formé sur un site, puis il a été désinstallé & retiré de Buildout.Plone 4: La désinstallation collective.formcriteria ne peut pas maintenant importer le site

Quand j'exporter mon site, il fonctionne très bien, mais en essayant d'importer le site me donne cette erreur:

Traceback (innermost last): 

    Module ZPublisher.Publish, line 127, in publish 
    Module ZPublisher.mapply, line 77, in mapply 
    Module ZPublisher.Publish, line 47, in call_object 
    Module OFS.ObjectManager, line 628, in manage_importObject 
    Module OFS.ObjectManager, line 646, in _importObjectFromFile 
    Module ZODB.ExportImport, line 92, in importFile 
    Module transaction._transaction, line 253, in savepoint 
    Module transaction._transaction, line 250, in savepoint 
    Module transaction._transaction, line 647, in __init__ 
    Module ZODB.Connection, line 1128, in savepoint 
    Module ZODB.Connection, line 570, in _commit 
    Module ZODB.ExportImport, line 175, in _importDuringCommit 

ImportError: No module named formcriteria.criteria.relativepath 

Est-ce que l'installation de ce module à nouveau et tenter d'importer/exporter mon travail de site ou est-il une autre solution ?

Merci.

+0

Pourriez-vous également inclure la trace complète à partir des journaux? –

+0

Traceback: [link] (http://pasteit.com/18049) – Dan

Répondre

2

Lors de l'importation, le ZODB doit remapper les identifiants persistants dans les pickles déposés et, pour ce faire, il doit «charger» toutes les entrées de votre fichier d'exportation.

Lors de ce processus de remappage, il essayera ainsi d'importer chaque classe référencée. Votre exportation contient toujours des références aux classes collective.formcriteria, et c'est pourquoi vous obtenez l'erreur lors de l'importation.

Il y a deux choses que vous pouvez faire:

  1. Installez collective.formcriteria dans votre buildout juste pour cette importation de travailler. Il n'est pas nécessaire d'exécuter le code d'installation ou quoi que ce soit, le processus Zope doit simplement pouvoir importer la classe pendant le processus d'importation. Vous pouvez l'enlever à nouveau après.

  2. Remplissez les importations manquantes avec des tronçons vides. Ceci est un peu plus complexe, car vous aurez besoin de créer un module factice que vous allez insérer dans sys.modules pour être chargé pour ce processus.

    Le module factice pourrait ressembler à ceci; Je l'ai nommé ce placeholder.py ':

    from persistent import Persistent 
    
    class PlaceHolderClass(Peristent): 
        def __repr__(self): 
         return "<Persistent placeholder class for now-removed instances>" 
    

    Et vous bouchonner les importations manquantes avec:

    import sys 
    import placeholder 
    
    sys.modules['collective.formcriteria.criteria.relativepath'] = placeholder 
    
    placeholder.FormRelativePathCriterion = placeholder.PlaceHolderClass 
    

    Il est tout à fait probable que vous aurez besoin de bouchonner plus ces classes, sur la base le collective.formcriteria package layout.

    L'utilisation de cette technique ne supprime pas les références rompues; il vous permettra seulement d'importer votre fichier .zexp dans une nouvelle instance.

+0

Merci, mais j'ai rapidement importé le contenu de l'ancien site dans un nouveau site Plone (dans mon travail, je ne suis pas vraiment autorisé à accéder au serveur via la CLI). Merci pour votre réponse si – Dan

+0

+1, vous n'êtes pas seulement un expert, vous savez aussi, comment le transporter aux gens d'une manière compréhensive, appréciez cela beaucoup. –

Questions connexes