2011-08-05 13 views
10

Estoy intentando configurar apio y django, pero la tabla apio_tareas no se está creando.¿Por qué celery_taskmeta y otras tablas no se crean cuando se ejecuta un syncdb en django?

He seguido numerosos tutoriales (Recientes), he añadido djcelery y djkombu a mis installed_apps. añadido la línea 'BROKER_TRANSPORT = 'djkombu.transport.DatabaseTransport'' a mi configuración, etc.

puedo ejecutar el demonio muy bien, y que va a ejecutar tareas, pero escupe este rastreo al final:

==============

2011-08-05 16:21:16,231: ERROR/MainProcess] Task slate.modules.filebrowser.tasks.gen_thumb_task[0afc564b-cc54-4f4c-83f5-6db56fb23b76] raised exception: DatabaseError('no such table: celery_taskmeta',) 
Traceback (most recent call last): 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 107, in execute_safe 
    return self.execute(*args, **kwargs) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 125, in execute 
    return super(WorkerTaskTrace, self).execute() 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/execute/trace.py", line 79, in execute 
    retval = self._trace() 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/execute/trace.py", line 93, in _trace 
    r = handler(trace.retval, trace.exc_type, trace.tb, trace.strtb) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/worker/job.py", line 140, in handle_success 
    self.task.backend.mark_as_done(self.task_id, retval) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/backends/base.py", line 54, in mark_as_done 
    return self.store_result(task_id, result, status=states.SUCCESS) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/celery/backends/base.py", line 194, in store_result 
    return self._store_result(task_id, result, status, traceback, **kwargs) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/backends/database.py", line 20, in _store_result 
    traceback=traceback) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 36, in _inner 
    return fun(*args, **kwargs) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 154, in store_result 
    "traceback": traceback}) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 78, in update_or_create 
    return self.get_query_set().update_or_create(**kwargs) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/djcelery/managers.py", line 62, in update_or_create 
    obj, created = self.get_or_create(**kwargs) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 378, in get_or_create 
    return self.get(**lookup), False 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 344, in get 
    num = len(clone) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 82, in __len__ 
    self._result_cache = list(self.iterator()) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator 
    for row in compiler.results_iter(): 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql 
    cursor.execute(sql, params) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site- packages/django/db/backends/util.py", line 34, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/erichutchinson/python-env/slate/lib/python2.7/site- packages/django/db/backends/sqlite3/base.py", line 234, in execute 
    return Database.Cursor.execute(self, query, params) 
DatabaseError: no such table: celery_taskmeta 

- ========================== ==

Entonces, ¿cómo demonios puedo obtener esta tabla creada durante syncdb?

+1

¿Agregó 'djcelery' a su' INSTALLED_APPS'? – MatToufoutu

+0

sí, las otras tablas en djcelery.models se sincronizan muy bien – Hutch

+1

Tenía el mismo problema. Si ha actualizado apio de una versión anterior, syncdb no creará nuevas tablas, necesita instalar sur y hacer una "python manage.py migrate" para crear las nuevas tablas, –

Respuesta

5

se encontró con el mismo problema exacto, nueva instalación. La degradación del apio y django-apio a 2.2.7 y la ejecución de syncdb lo resolvió (por el momento, de todos modos).

+0

También puedo responder por esta "solución". Y aquí pensé que estaba haciendo algo mal durante las últimas 4 horas ... –

+0

Esto funcionó, además de estar atento al CELERY_RESULT_BACKEND = 'error – Hutch

+0

Funcionó también para mí. Terminé configurando el sur para ignorar djcelery por ahora ya que migrar aún quería hacerlo. Asegúrese de que tampoco haya entradas de djcelery en su tabla south_migrationhistory o le causará algunos problemas. –

0

El problema es probablemente SQLite3. No puede usarlo simultáneamente en Django y arroja un error engañoso. Cambie a PostgreSQL o MySQL, especialmente para el desarrollo apical.

O, de tripas corazón, y RabbitMQ configuración ...

+1

Estoy usando postgres y tengo el mismo problema anterior. –

1

Recibí este error al ejecutar manage.py dumpdata. Probé dos versiones 2.2.x diferentes de los paquetes de apio y django-apio con una base de datos MySQL. En mi caso, actualizar a 2.2.7 no solucionó el problema. Lo que funcionó fue el consejo encontrado en este Github Issue #34.

Al usar dumpdata en Django 1.3+, agregue la opción --exclude djcelery. (Por supuesto, si solo está volcando un subconjunto de aplicaciones y modelos, no obtendrá el error de tabla faltante. Y si no está utilizando dumpdata en primer lugar, esta respuesta no se aplica)

5

que estaba recibiendo un error similar:

DatabaseError: no such table: djkombu_queue 

En mi caso, tenía que añadir una aplicación Django de una tecnología relacionada con el ajuste INSTALLED_APPS. En mi caso, fue: kombu.transport.django

Después de eso, volví a syncdb y todo estaba funcionando. En su caso, tal vez agregue algo en el huevo de apio al camino.

+1

Tuve el mismo problema que tú, resuelto con la misma corrección, ¡muy apreciado! –

+1

resuelto para mí. usted es un erudito superior – rikAtee

17

El problema aquí es que South administra las tablas de djcelery. Debe migrar djcelery a su nuevo esquema. Si ha actualizado djcelery de una versión anterior y ya tiene un conjunto de tablas instalados, tendrá que hacer una migración falsos primera:

python manage.py migrate djcelery 0001 --fake 
python manage.py migrate djcelery 

que tenían los mismos problemas antes, pero esta arreglado.

+0

esto funcionó para mí, bueno, casi, tuve que falsificar 0001 en la migración de djcelery.transport –

+0

Tuve que falsificar 0002 también. Corriendo de nuevo después de eso. –

+0

Perfecto, gracias! Aunque no necesitaba la migración falsa. Simplemente ejecuté el segundo comando y creó las tablas que faltan. – Sarang

10

También conseguía el siguiente error:

DatabaseError: no such table: djkombu_queue 

Después de mirar en él un poco más creo que la forma correcta de resolver este problema (sacado de here) para añadir lo siguiente a INSTALLED_APPS:

INSTALLED_APPS = ('djcelery.transport',) 

Agregar kombu.transport.django me pareció incorrecto.

+1

¡Puedo dar fe de esta solución! – rikAtee

Cuestiones relacionadas