Heroku RQ (Redis Queue) Ошибка Django: «Приложения еще не загружены». - PullRequest
0 голосов
/ 02 января 2019

У меня есть функциональное приложение Django, которое на мой взгляд содержит множество вызовов Google Text-To-Speech API и чтение / запись базы данных.При локальном тестировании загрузка страницы занимает около 3 секунд, но при развертывании приложения в режиме реального времени на Heroku загрузка страницы занимает около 15 секунд.Поэтому я пытаюсь сократить время загрузки.

Я наткнулся на эту статью: https://devcenter.heroku.com/articles/python-rq, в которой предлагается использовать фоновые задачи, ставя задания в очередь для работников, использующих библиотеку RQ (Redis Queue).Я выполнил их действия и включил их файл worker.py в тот же каталог, что и мой файл manage.py (не уверен, что это правильное место для его размещения).Я хотел проверить его локально с помощью фиктивной функции и посмотреть, будет ли он работать без ошибок.

# views.py
from rq import Queue
from worker import conn

def dummy(foo):
    return 2

def my_view(request):
    q = Queue(connection=conn)
    for i in range(10):
        dummy_foo = q.enqueue(dummy, "howdy")
    return render(request, 'dummy.html', {})

В отдельных терминалах я запускаю:

$ python worker.py
$ python manage.py runserver

Но при загрузкевеб-страница Я получил много сообщений об ошибках "Apps aren't loaded yet." в терминале python worker.py.Я еще не пытался выполнить развертывание в Heroku, но мне интересно, почему я получаю это сообщение об ошибке локально?

1 Ответ

0 голосов
/ 07 января 2019

Вы не опубликовали код worker.py, но я бы поспорил, что он неправильно инициализирует Django. Взгляните на содержимое manage.py, чтобы увидеть пример. Таким образом, если worker.py попытается создать (или даже импортировать) какие-либо модели, представления и т. Д., Вы получите такую ​​ошибку. Django должен разрешить settings.py (среди прочего), а затем использовать его для поиска настроек базы данных, разрешения моделей / отношений и т. Д.

Самый простой путь - использовать django-rq, простую библиотеку, которая объединяет RQ и Django для обработки всего этого. Ваш worker.py по сути становится просто python manage.py rqworker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...