Официантка на Heroku дает ошибку
Я пытаюсь переключиться с Gunicorn на официантку на Heroku. В журналах я продолжаю получать сообщение об ошибке от официантки:
Error: Bad module 'cardisle'
в моем procfile у меня есть:
web: waitress-serve --port=$PORT cardisle.wsgi:application
если я удалить .wsgi расширение, я получаю другую ошибку:
Error: Bad object name 'application'
Я пробовал changint имя объекта wsgifunc а также, так как это в официантке док, но не повезло.
любая помощь будет оценили. У меня есть wsgi.py файл с следующий:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cardisle.settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
4 ответов
вот ужасный факт о официантке: он скрывает от вас информацию.
если вы посмотрите на источник, "плохой модуль" - это код для " произошел сбой импорта вашего приложения из модуля wsgi."
чтобы увидеть ошибки, попробуй:
- вход в dyno с heroku run bash
- переход к каталогу с помощью wsgi.py в нем (с cd)
- открытие оболочки с python
- под управлением import wsgi
когда я нажал эту ошибку и сделал это, я получил:
~/proj/proj $ python
Python 2.7.9 (default, Dec 11 2014, 17:18:51) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wsgi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "wsgi.py", line 36, in <module>
    application = get_wsgi_application()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/config.py", line 86, in create
    module = import_module(entry)
  File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named debug_toolbar
что является гораздо более полезной ошибкой. В моем случае я установил DJANGO_SETTINGS_MODULE в "local" в производстве (у которого не было соответствующих требований), и поэтому импорт не удался.
точный характер вашей проблемы будет отличаться, но я упомяну случай, который расстроил меня, когда я начал:
если вы используете web: waitress-serve --port=$PORT cardisle.wsgi:application, вы можете необходимо изменить переменную среды PYTHONPATH так, чтобы PYTHONPATH+cardisle.wsgi-это полностью сформированный существующий путь на рассматриваемой машине.
сегодня вечером я открою PR для официантки, которая пытается вскрыть ошибку импорта. Удачи в остальном!
думаю, я нашел ответ. Если ваш проект выложен так (как они по умолчанию):
cardisle/
  cardisle/
    wsgi.py
  app1/
  app2/
  app3/
попробуйте этот Procfile вместо:
web: waitress-serve --port=$PORT cardisle.cardisle.wsgi:application
Я подумал об этом, потому что образец проекта Дэйва Холла имеет другой макет:
projectname/
  wsgi.py
  apps/
    app1/
    app2/
    app3/
, которая имеет
попробуйте изменить файл WSGI следующим образом(для Django 1.7):
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
у меня была такая же ошибка, потому что раньше мой файл Procfile был настроен так, как описано в руководстве Heroku:
 from django.core.wsgi import get_wsgi_application
 from dj_static import Cling
 application = Cling(get_wsgi_application())
и это вызвало проблему для меня.
