Подтвердить что ты не робот

Heroku - нет модуля с именем wsgi

Я следил за запуском руководства Django в центре поддержки Heroku, но я получаю следующую ошибку, когда я пытаюсь запустить его либо на Heroku, либо с помощью мастера:

ImportError: No module named wsgi

Вот мой procfile:

web: gunicorn testproject.wsgi -b 0.0.0.0:$PORT

Вот мой файл настроек проекта django:

from datetime import date, timedelta
import os
oneyr = date.today() + timedelta(days=365)
PROJECT_DIR = os.path.dirname(__file__)

DEBUG = os.environ.get('DEBUG')
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', '[email protected]'),
)

MANAGERS = ADMINS

TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-gb'
USE_I18N = False
USE_L10N = True

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'static/')
MEDIA_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static/'),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'testproject.urls'

TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, 'templates')
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'gunicorn',
    'storages',
)

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

Кто-нибудь знает, почему это приложение не запустится?

4b9b3361

Ответ 1

Это старый вопрос, но я отвечаю на него, тем не менее, когда я столкнулся с этой точной проблемой в последнее время, и ответ Intenex, хотя полезный был не в состоянии разрешите мою проблему.

Как указано Intenex, вам, вероятно, не хватает файла wsgi.py. Это может быть связано с тем, что вы создали свой проект с использованием Django 1.3 или предыдущей версии. Создание проекта с использованием Django 1.4 автоматически создает wsgi.py точно так же, как manage.py, settings.py.

В отличие от Intenex, здесь вы должны сделать. Предполагая, что вы используете Django 1.3 или более раннюю версию, создайте файл wsgi.py в каталоге проекта (тот же каталог, что и manage.py и т.д.), И добавьте в свой файл wsgi.py следующее:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

# This application object is used by the development server
# as well as any WSGI server configured to use this file.
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Обратите внимание на разницу в последних двух операциях по сравнению с ответом Intenex.

С этим вы можете запустить foreman start со следующим в своем Procfile:

web: gunicorn mysite.wsgi

Ответ 2

Похоже, у вас нет файла модуля wsgi.py в каталоге проекта. Если вы начали проект (с проектом проекта django-admin.py startproject) с Django 1.3 или ранее, файл wsgi не был автоматически создан. Вы сами захотите создать его в следующем руководстве:

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/

В соответствии с руководством, поместите это в файл, убедившись, что вы изменили "mysite" на название вашего проекта:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

# This application object is used by the development server
# as well as any WSGI server configured to use this file.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Кроме того, поскольку я не видел этого в ваших настройках, вам нужно убедиться, что ваш каталог проекта включен в ваш путь Python в соответствии с последним предложением здесь: https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/gunicorn/#running-django-in-gunicorn-as-a-generic-wsgi-application

Или вы столкнетесь с той же проблемой, что и я: Ошибка импорта приложения для Python в Django с помощью буксировки WSGI

После этого все должно работать без сучка и задоринки. Ура!

Sidenote: Возможно, вы уже можете запустить gunicorn, изменив свой Procfile на:

web: python manage.py run_gunicorn

по https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/gunicorn/#using-gunicorn-s-django-integration, но я не проверял это сам так не уверен. Может понадобиться модуль wsgi.py.

Ответ 3

Просто наткнулся на эту проблему; что мой Procfile имел кодировку EOL для Windows Format; переключился на UNIX EOL - и voilà, работал.

Ответ 4

Произошла эта ошибка и указанный выше вопрос.

У найденного файла настроек была синтаксическая ошибка в строке для ALLOWED_HOSTS. Приведенные выше описания помогают указать мне в этом направлении (по крайней мере, глядя на настройки).

Думал, что это может помочь кому-то еще...

Ответ 5

Я столкнулся с этой ошибкой, потому что вручную переименовал мою папку проекта с myproject на myproject_django, но я не исправил все ссылки в файле настроек. В частности,

WSGI_APPLICATION = 'myproject.wsgi.application'

необходимо изменить на

WSGI_APPLICATION = 'myproject_django.wsgi.application'

Опять же, есть несколько ссылок в этом файле, которые необходимо изменить. Просто выполните поиск и аккуратную замену один за другим.