2011-08-05 30 views
10

Tôi đang cố gắng thiết lập cần tây và django, nhưng bảng celery_taskmeta không được tạo.Tại sao celery_taskmeta và các bảng khác không được tạo khi chạy syncdb trong django?

Tôi đã theo dõi nhiều hướng dẫn (Gần đây), thêm djcelery và djkombu vào các tệp đã cài đặt của tôi. thêm dòng 'BROKER_TRANSPORT = 'djkombu.transport.DatabaseTransport'' để thiết lập của tôi, vv

tôi có thể chạy các daemon tốt, và nó sẽ thực hiện nhiệm vụ, nhưng nó spits ra traceback này ở cuối:

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

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 

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

vậy làm cách nào để tôi tạo bảng này trong syncdb?

+1

Bạn đã thêm 'djcelery' vào' INSTALLED_APPS' của mình chưa? – MatToufoutu

+0

có, các bảng khác trong djcelery.models được đồng bộ hóa tốt – Hutch

+1

Có cùng vấn đề. Nếu bạn đã cập nhật cần tây từ phiên bản cũ, syncdb sẽ không tạo bảng mới, bạn cần cài đặt phía nam và thực hiện "python manage.py migrate" để tạo bảng mới, –

Trả lời

5

Quay lại vấn đề tương tự, cài đặt mới. Hạ xuống cần tây và django-cần tây để 2.2.7 và chạy lại syncdb giải quyết nó (cho tạm thời, anyway).

+0

Tôi cũng có thể xác nhận cho "giải pháp" này. Và ở đây tôi nghĩ rằng tôi đã làm điều gì đó sai trong 4 giờ qua ... –

+0

Điều này đã làm việc, ngoài ra watchout cho CELERY_RESULT_BACKEND = 'lỗi – Hutch

+0

Làm việc cho tôi quá. Tôi đã kết thúc ở phía nam để bỏ qua djcelery từ bây giờ vì di cư vẫn muốn làm điều đó. Đảm bảo không có mục nhập djcelery nào trong bảng south_migrationhistory của bạn hoặc nó sẽ gây ra một số vấn đề. –

0

Sự cố có thể là SQLite3. Bạn không thể sử dụng nó đồng thời ở Django và nó đang ném một lỗi gây hiểu lầm. Chuyển sang PostgreSQL hoặc MySQL, đặc biệt là để phát triển celeryd.

Hoặc, cắn viên đạn và thiết lập RabbitMQ ...

+1

Tôi đang sử dụng postgres và có cùng vấn đề ở trên. –

1

Tôi gặp lỗi này khi chạy manage.py dumpdata. Tôi đã thử hai phiên bản 2.2.x khác nhau của gói cần tâydjango-celery với cơ sở dữ liệu MySQL. Trong trường hợp của tôi nâng cấp lên 2.2.7 đã không khắc phục được sự cố. Công việc đã được tìm thấy trên Github Issue #34.

Khi sử dụng dumpdata trên Django 1.3+, hãy thêm tùy chọn --exclude djcelery. (Tất nhiên, nếu bạn đang bán phá giá chỉ là một tập con của các ứng dụng và các mô hình bạn sẽ không nhận được lỗi bảng bị thiếu. Và nếu bạn không sử dụng dumpdata ở nơi đầu tiên, câu trả lời này không áp dụng.)

5

tôi đã nhận được một lỗi tương tự:

DatabaseError: no such table: djkombu_queue 

Trong trường hợp của tôi, tôi cần thêm một ứng dụng Django từ một công nghệ có liên quan đến các thiết lập INSTALLED_APPS. Trong trường hợp của tôi, đó là: kombu.transport.django

Sau đó, tôi đọc lại syncdb và mọi thứ đang hoạt động. Trong trường hợp của bạn, có thể thêm một cái gì đó trong quả trứng cần tây vào con đường.

+1

Tôi đã có cùng một vấn đề như bạn, được giải quyết với cùng một bản sửa lỗi - được đánh giá cao! –

+1

được giải quyết cho tôi. bạn là một học giả hàng đầu – rikAtee

17

Vấn đề ở đây thực tế là miền Nam quản lý các bảng djcelery. Bạn cần di chuyển djcelery đến lược đồ mới của nó. Nếu bạn nâng cấp djcelery từ một phiên bản trước đó và bạn đã có một tập hợp các bảng cài đặt, bạn cần phải làm một sự chuyển đổi giả đầu tiên:

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

tôi đã có vấn đề tương tự trước nhưng điều này cố định nó.

+0

điều này làm việc cho tôi, cũng gần như, tôi cần phải giả mạo 0001 trên di chuyển djcelery.transport của –

+0

Tôi đã phải giả 0002 là tốt. Chạy lại sau đó. –

+0

Hoàn hảo, cảm ơn! Tôi không cần sự di chuyển giả mạo. Chỉ cần chạy lệnh thứ 2 và nó tạo ra các bảng bị thiếu. – Sarang

10

Tôi cũng đã nhận được các lỗi sau:

DatabaseError: no such table: djkombu_queue 

Sau khi xem xét nó một chút nữa tôi tin rằng cách chính xác để giải quyết vấn đề này (kéo từ here) nó để thêm dòng sau vào INSTALLED_APPS:

INSTALLED_APPS = ('djcelery.transport',) 

Thêm kombu.transport.django cảm thấy không chính xác.

+1

Tôi có thể chứng thực điều này! – rikAtee

Các vấn đề liên quan