尝试在 Heroku 中打开 Django 应用程序时出现 ModuleNotFound 错误- gunicorn 设置有问题吗?
ModuleNotFound error trying to open Django app in Heroku- issue with gunicorn setup?
我一直在构建我的第一个 Django 项目(到目前为止,只是 运行 在本地使用 运行server 将其运行),我正在采取步骤将其托管在 Heroku 上,添加 gunicorn .构建成功,但是当我尝试打开应用程序时,Heroku 日志显示工作进程出现异常:
ModuleNotFoundError: No module named 'mysite.wsgi'
最初我的 Procfile 是这样的:
web: gunicorn mysite.wsgi
当我在本地尝试 gunicorn 命令时,它会在 family-django/mysite 目录中运行,但是当我在根目录 (family-django) 中尝试时,它会给我相同的 'no module named mysite.wsgi' 错误。根据 ,Heroku 将从根目录尝试,所以我按如下方式更新了我的 Procfile,改为从 mysite 目录告诉它 运行:
web: gunicorn --chdir mysite mysite.wsgi
这个新的 gunicorn 命令在 运行 来自根目录 (family-django) 时在本地工作,万岁!那一定是我需要的修复程序。 但是:在更新 Heroku 中的 Procfile 并尝试再次打开应用程序后,它仍然失败并出现上面粘贴的 'no module named mysite.wsgi' 错误。 因此 Heroku 还需要一些其他调整到 运行 那里。
我的Django项目结构是这样的:
family-django
|-mysite
| |-familytree
| |-myauth
| |-mysite
| |-asgi.py
| |-settings.py
| |-urls.py
| |-wsgi.py
|-Procfile
|-requirements.txt
wsgi.py 和 asgi.py 都是在项目开始时创建的。 (不确定同时拥有两者是否错误?)。 wsgi.py 有:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
settings.py 具有 INSTALLED_APPS 和 WSGI_APPLICATION 的以下信息:
INSTALLED_APPS = [
'familytree.apps.FamilytreeConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
"myauth",
]
WSGI_APPLICATION = 'mysite.wsgi.application'
既然我想在 Heroku 上解决这个问题,他们推荐 gunicorn,所以我添加了 requirements.txt:
django
django-heroku
gunicorn
Procfile 有:
web: gunicorn --chdir mysite mysite.wsgi
#----------------------------Install packages----------------------------
1)pip install django-heroku
2)pip install whitenoise
#-----------------------------setting.py----------------------------------#
1)INSTALLED_APPS = [
...,
'django_heroku',
]
2)MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
]
3)STATICFILES_STORAGE =
'whitenoise.storage.CompressedManifestStaticFilesStorage'
4)STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
django_heroku.settings(locals())
#-----------------------urls.py---------------------------------------#
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...,
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
#------------------Procfile create in Root DIR-----------------#
paste in (web: gunicorn projectname.wsgi)
#--------------create requirements.txt---------------------------#
pip freeze > requirements.txt
# runtime.txt create in Root DIR
paste in (your python version for ex.python-3.8.5)
#---------then commands in terminal-------------------------#
heroku login
heroku create YOUR_APP_NAME
##for Clone the repository.......
git init
heroku git:clone -a YOUR_APP_NAME
## for Deploy your changes......
git init
git add .
git commit - m "initial"
git push heroku master
## then
heroku run python manage.py migrate
heroku run python manage.py createsuperuser
我一直在构建我的第一个 Django 项目(到目前为止,只是 运行 在本地使用 运行server 将其运行),我正在采取步骤将其托管在 Heroku 上,添加 gunicorn .构建成功,但是当我尝试打开应用程序时,Heroku 日志显示工作进程出现异常:
ModuleNotFoundError: No module named 'mysite.wsgi'
最初我的 Procfile 是这样的:
web: gunicorn mysite.wsgi
当我在本地尝试 gunicorn 命令时,它会在 family-django/mysite 目录中运行,但是当我在根目录 (family-django) 中尝试时,它会给我相同的 'no module named mysite.wsgi' 错误。根据
web: gunicorn --chdir mysite mysite.wsgi
这个新的 gunicorn 命令在 运行 来自根目录 (family-django) 时在本地工作,万岁!那一定是我需要的修复程序。 但是:在更新 Heroku 中的 Procfile 并尝试再次打开应用程序后,它仍然失败并出现上面粘贴的 'no module named mysite.wsgi' 错误。 因此 Heroku 还需要一些其他调整到 运行 那里。
我的Django项目结构是这样的:
family-django
|-mysite
| |-familytree
| |-myauth
| |-mysite
| |-asgi.py
| |-settings.py
| |-urls.py
| |-wsgi.py
|-Procfile
|-requirements.txt
wsgi.py 和 asgi.py 都是在项目开始时创建的。 (不确定同时拥有两者是否错误?)。 wsgi.py 有:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
settings.py 具有 INSTALLED_APPS 和 WSGI_APPLICATION 的以下信息:
INSTALLED_APPS = [
'familytree.apps.FamilytreeConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
"myauth",
]
WSGI_APPLICATION = 'mysite.wsgi.application'
既然我想在 Heroku 上解决这个问题,他们推荐 gunicorn,所以我添加了 requirements.txt:
django
django-heroku
gunicorn
Procfile 有:
web: gunicorn --chdir mysite mysite.wsgi
#----------------------------Install packages----------------------------
1)pip install django-heroku
2)pip install whitenoise
#-----------------------------setting.py----------------------------------#
1)INSTALLED_APPS = [
...,
'django_heroku',
]
2)MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
]
3)STATICFILES_STORAGE =
'whitenoise.storage.CompressedManifestStaticFilesStorage'
4)STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
django_heroku.settings(locals())
#-----------------------urls.py---------------------------------------#
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...,
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
#------------------Procfile create in Root DIR-----------------#
paste in (web: gunicorn projectname.wsgi)
#--------------create requirements.txt---------------------------#
pip freeze > requirements.txt
# runtime.txt create in Root DIR
paste in (your python version for ex.python-3.8.5)
#---------then commands in terminal-------------------------#
heroku login
heroku create YOUR_APP_NAME
##for Clone the repository.......
git init
heroku git:clone -a YOUR_APP_NAME
## for Deploy your changes......
git init
git add .
git commit - m "initial"
git push heroku master
## then
heroku run python manage.py migrate
heroku run python manage.py createsuperuser