web-dev-qa-db-ja.com

Heroku-wsgiという名前のモジュールはありません

はじめにDjango Herokuサポートセンターのガイドに従いましたが、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', '[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'

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

21
Hanpan

これは古い質問ですが、私はこの正確な問題に最近直面し、 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の回答と比較した最後の2つのステートメントの違いに注意してください。

これにより、Procfileで以下を使用してforeman startを実行できるようになります。

web: gunicorn mysite.wsgi

19
Arpit Rai

プロジェクトディレクトリに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

それ以外の場合は、私が行ったのと同じ問題が発生します。 PythonアプリのインポートエラーDjango with WSGI gunicorn

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

補足: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モジュールが必要な場合があります。

4
Intenex

ちょうどこの問題に遭遇しました。私のProcfileにWindows形式のEOLエンコーディングが含まれていることに気付きました。 UNIX EOLに切り替えました-ほら、動作しました。

1
karlheinz_sch

今、このエラーと上記の質問に出くわしました。

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

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

1
Minnow

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

WSGI_APPLICATION = 'myproject.wsgi.application'

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

WSGI_APPLICATION = 'myproject_Django.wsgi.application'

このファイルにも、変更が必要な参照がいくつかあります。検索して、1つずつ慎重に置き換えてください。

0
Seth

私にもこのエラーがあり、他のソリューションでは修正できませんでした。私の問題の原因は、apt-getを使用してgunicornをインストールしたことです。解決するために、apt経由でgunicornを削除して実行しましたpip install gunicorn

0
Brukba