24

Heroku サポート センターの Django 入門ガイドに従いましたが、Heroku または foreman で起動しようとすると、次のエラーが表示されます。

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', 'your_email@example.com'),
)

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'

このアプリが起動しない理由を知っている人はいますか?

4

6 に答える 6

20

これは古い質問ですが、最近この正確な問題に直面し、Intenexによる回答が役に立ったものの、問題を解決できなかったため、私はそれに答えています。

Intenexが指摘しているように、おそらくファイルが欠落していwsgi.pyます。これは、Django1.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の回答と比較した最後の2つのステートメントの違いに注意してください。

foreman startこれにより、Procfileで次のコマンドを実行できるようになります。

web: gunicorn mysite.wsgi

于 2012-12-25T08:47:55.637 に答える
5

プロジェクト ディレクトリに wsgi.py モジュール ファイルがないようです。Django 1.3 以前で (django-admin.py startproject プロジェクトを使用して) プロジェクトを開始した場合、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

そうしないと、私が行ったのと同じ問題に遭遇するでしょう: WSGI gunicorn を使用した Django での Python アプリのインポート エラー

その後、すべてが問題なく動作するはずです。乾杯!

補足: Procfile を次のように変更することで、既に gunicorn を実行できる場合があります。

web: python manage.py run_gunicorn

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/gunicorn/#using-gunicorn-s-django-integrationに従って、しかし私はこれを自分でテストしていないのでわかりません。wsgi.py モジュールがまだ必要な場合があります。

于 2012-07-26T05:16:38.453 に答える
1

このエラーと上記の質問に今遭遇しました。

設定ファイルの の行に構文エラーがあることがわかりましたALLOWED_HOSTS。上記の説明は、その方向性を示すのに役立ちます(少なくとも設定を見てください)。

それは他の誰かを助けるかもしれないと思った...

于 2015-08-10T18:23:25.123 に答える
1

この問題に遭遇しました。私のProcfileにはWindows Format EOL Encodingが含まれていることに気づきました。UNIX EOL に切り替えました - そしてほら、うまくいきました。

于 2013-12-09T01:56:43.843 に答える
0

プロジェクト フォルダの名前を手動で から に変更したため、このエラーが発生しましたmyprojectmyproject_django、設定ファイル内のすべての参照を修正していませんでした。特に、

WSGI_APPLICATION = 'myproject.wsgi.application'

に変更する必要がありました

WSGI_APPLICATION = 'myproject_django.wsgi.application'

繰り返しますが、そのファイルには変更が必要な参照がいくつかあります。検索して、慎重に 1 つずつ置換するだけです。

于 2015-11-20T22:10:06.127 に答える