はじめに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'
このアプリが起動しない理由を誰かが知っていますか?
これは古い質問ですが、私はこの正確な問題に最近直面し、 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
プロジェクトディレクトリに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モジュールが必要な場合があります。
ちょうどこの問題に遭遇しました。私のProcfileにWindows形式のEOLエンコーディングが含まれていることに気付きました。 UNIX EOLに切り替えました-ほら、動作しました。
今、このエラーと上記の質問に出くわしました。
設定ファイルのALLOWED_HOSTS
の行に構文エラーがあることがわかりました。上記の説明は、私をその方向に向けるのに役立ちます(少なくとも設定を見ると)。
それは誰かを助けるかもしれないと思った...
プロジェクトフォルダーの名前をmyproject
からmyproject_Django
に手動で変更したため、このエラーに遭遇しましたが、設定ファイル内のすべての参照を修正していません。特に、
WSGI_APPLICATION = 'myproject.wsgi.application'
に変更する必要がありました
WSGI_APPLICATION = 'myproject_Django.wsgi.application'
このファイルにも、変更が必要な参照がいくつかあります。検索して、1つずつ慎重に置き換えてください。
私にもこのエラーがあり、他のソリューションでは修正できませんでした。私の問題の原因は、apt-getを使用してgunicornをインストールしたことです。解決するために、apt経由でgunicornを削除して実行しましたpip install gunicorn
。