2013-08-02 1 views
1

Je suis en train de tester une mise à niveau de NonRel pour App Engine à 1.4 à partir de 1.3. Il fonctionne très bien au niveau local, mais quand je déploie à App Engine, je reçois une erreur de syncdb à la fin du déploiement:Pourquoi ai-je une exception MultiQuery sur 1.4 nonrel?

Running syncdb. 
2013-08-02 09:31:34,600 WARNING simple_search_stub.py:998 Could not read search indexes from /var/folders/fv/cdp4hprx5pbc_3bf5g0wbbkw0000gn/T/dev_appserver.searchindexes 
Creating tables ... 
The following content types are stale and need to be deleted: 

    auth | message 

Any objects related to these content types by a foreign key will also 
be deleted. Are you sure you want to delete these content types? 
If you're unsure, answer 'no'. 

    Type 'yes' to continue, or 'no' to cancel: yes 
Traceback (most recent call last): 
    File "manage.py", line 9, in <module> 
    execute_from_command_line(sys.argv) 
    File "/src/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/src/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/src/djangoappengine/management/commands/deploy.py", line 72, in run_from_argv 
    run_appcfg(argv) 
    File "/src/djangoappengine/management/commands/deploy.py", line 51, in run_appcfg 
    call_command('syncdb', remote=True, interactive=True) 
    File "/src/django/core/management/__init__.py", line 150, in call_command 
    return klass.execute(*args, **defaults) 
    File "/src/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/src/django/core/management/base.py", line 371, in handle 
    return self.handle_noargs(**options) 
    File "/src/django/core/management/commands/syncdb.py", line 110, in handle_noargs 
    emit_post_sync_signal(created_models, verbosity, interactive, db) 
    File "/src/django/core/management/sql.py", line 189, in emit_post_sync_signal 
    interactive=interactive, db=db) 
    File "/src/django/dispatch/dispatcher.py", line 172, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/src/django/contrib/contenttypes/management.py", line 67, in update_contenttypes 
    ct.delete() 
    File "/src/django/db/models/base.py", line 599, in delete 
    collector.delete() 
    File "/src/django/db/models/deletion.py", line 61, in decorated 
    func(self, *args, **kwargs) 
    File "/src/django/db/models/deletion.py", line 261, in delete 
    query.delete_batch([obj.pk for obj in instances], self.using, field) 
    File "/src/django/db/models/sql/subqueries.py", line 44, in delete_batch 
    self.do_query(self.model._meta.db_table, where, using=using) 
    File "/src/django/db/models/sql/subqueries.py", line 29, in do_query 
    self.get_compiler(using).execute_sql(None) 
    File "/src/djangotoolbox/db/basecompiler.py", line 593, in execute_sql 
    self.build_query([self.query.get_meta().pk]).delete() 
    File "/src/djangoappengine/db/compiler.py", line 69, in _func 
    return func(*args, **kwargs) 
    File "/src/djangoappengine/db/compiler.py", line 168, in delete 
    Delete(keys) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 695, in Delete 
    return DeleteAsync(keys, **kwargs).get_result() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 674, in DeleteAsync 
    keys, _ = NormalizeAndTypeCheckKeys(keys) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 176, in NormalizeAndTypeCheckKeys 
    keys, multiple = NormalizeAndTypeCheck(keys, (basestring, Entity, Key)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 143, in NormalizeAndTypeCheck 
    arg_list = list(arg) 
    File "/src/djangoappengine/db/compiler.py", line 105, in fetch 
    query = self._build_query() 
    File "/src/djangoappengine/db/compiler.py", line 69, in _func 
    return func(*args, **kwargs) 
    File "/src/djangoappengine/db/compiler.py", line 322, in _build_query 
    return MultiQuery(self.gae_query, self.ordering) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 1998, in __init__ 
    'MultiQuery does not support keys_only.') 
django.db.utils.DatabaseError: MultiQuery does not support keys_only. 

Je suis en mesure de contourner le problème en supprimant les types de contenu sur mon serveur de développement local, mais Je me demande pourquoi je reçois cette erreur. Je comprends ce que l'exception dit, mais je ne comprends pas pourquoi NonRel n'a pas adapté Django pour effectuer correctement cette opération dans App Engine?

Répondre

0

Cela peut être un bogue dans un chemin du compilateur djangoappengine qui n'est pas beaucoup utilisé. Il y avait une autre suppression bug lié il y a quelques mois:

https://groups.google.com/forum/#!searchin/django-non-relational/delete/django-non-relational/Eb6K7fVYrhM/_QmLPtbIfmMJ

Cela étant dit, je ne suis même pas sûr pourquoi fonctionne djangoappengine syncdb du tout lors du déploiement. Il exécute syncdb localement, pas sur le serveur de production. Cela semble anodin, je suppose que c'est juste un sous-produit de certains chemins de code django existants.

+0

Ouais, il est étrange qu'il fonctionne syncdb sur ma base de données locale quand je déploiera. Je suppose que c'est un double problème! – jacob

0

J'encontered une erreur simillar pouvez-vous essayer

./manage.py sqlflush