I'm trying to deploy a Django1.10 app to Heoroku, and I followed this guide to add the required configurations.
After deploy, application crash and I get a No module named gettingstarted.wsgi
ImportError - full traceback as follow:
2017-04-15T12:22:03.430119+00:00 heroku[web.1]: Starting process with command `gunicorn gettingstarted.wsgi --log-file -`
2017-04-15T12:22:05.349515+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [4] [INFO] Listening at: http://0.0.0.0:40627 (4)
2017-04-15T12:22:05.349596+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [4] [INFO] Using worker: sync
2017-04-15T12:22:05.352984+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [9] [INFO] Booting worker with pid: 9
2017-04-15T12:22:05.355385+00:00 app[web.1]: Traceback (most recent call last):
2017-04-15T12:22:05.349135+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [4] [INFO] Starting gunicorn 19.7.1
2017-04-15T12:22:05.355386+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
2017-04-15T12:22:05.355384+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [9] [ERROR] Exception in worker process
2017-04-15T12:22:05.355387+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 126, in init_process
2017-04-15T12:22:05.355387+00:00 app[web.1]: self.load_wsgi()
2017-04-15T12:22:05.355386+00:00 app[web.1]: worker.init_process()
2017-04-15T12:22:05.355388+00:00 app[web.1]: self.wsgi = self.app.wsgi()
2017-04-15T12:22:05.355389+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
2017-04-15T12:22:05.355389+00:00 app[web.1]: self.callable = self.load()
2017-04-15T12:22:05.355388+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
2017-04-15T12:22:05.355390+00:00 app[web.1]: return self.load_wsgiapp()
2017-04-15T12:22:05.355390+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
2017-04-15T12:22:05.355390+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
2017-04-15T12:22:05.355391+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 352, in import_app
2017-04-15T12:22:05.355391+00:00 app[web.1]: return util.import_app(self.app_uri)
2017-04-15T12:22:05.355392+00:00 app[web.1]: __import__(module)
2017-04-15T12:22:05.355467+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [9] [INFO] Worker exiting (pid: 9)
2017-04-15T12:22:05.372618+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [4] [INFO] Shutting down: Master
2017-04-15T12:22:05.372681+00:00 app[web.1]: [2017-04-15 12:22:05 +0000] [4] [INFO] Reason: Worker failed to boot.
2017-04-15T12:22:05.355392+00:00 app[web.1]: ImportError: No module named gettingstarted.wsgi
2017-04-15T12:22:05.499273+00:00 heroku[web.1]: Process exited with status 3
2017-04-15T12:22:05.521522+00:00 heroku[web.1]: State changed from starting to crashed
This is my settings.py
import os
import dj_database_url
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '...'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
'mrp.apps.MrpConfig',
'django.contrib.humanize',
'dal',
'dal_select2',
'smart_selects',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'wkhtmltopdf',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'py_mrp.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'py_mrp.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'it-it'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = True
USE_TZ = True
WKHTMLTOPDF_CMD = '/usr/bin/wkhtmltopdf'
WKHTMLTOPDF_DEBUG = True
def ABS_DIR(rel):
return os.path.join(BASE_DIR, rel.replace('/', os.path.sep))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = ABS_DIR('/static/')
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
This is my Procfile:
web: gunicorn gettingstarted.wsgi --log-file -
This is my wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "py_mrp.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
This is my requirements.txt:
appdirs==1.4.3
astroid==1.4.8
attrs==15.2.0
awsebcli==3.7.8
backports.functools-lru-cache==1.3
backports.ssl-match-hostname==3.5.0.1
blessed==1.9.5
botocore==1.4.54
cement==2.8.2
cffi==1.10.0
click==6.7
colorama==0.3.7
configparser==3.5.0
cryptography==1.2.3
dj-database-url==0.4.2
Django==1.10.3
django-autocomplete-light==3.2.1
django-smart-selects==1.3.2
django-wkhtmltopdf==3.1.0
docker-py==1.7.2
dockerpty==0.4.1
docopt==0.6.2
docutils==0.12
enum34==1.1.2
Flask==0.12
gevent==1.1.1
greenlet==0.4.11
gunicorn==19.7.1
idna==2.0
ipaddress==1.0.16
isort==4.2.5
itsdangerous==0.24
Jinja2==2.9.4
jmespath==0.9.0
lazy-object-proxy==1.2.2
locustio==0.7.5
MarkupSafe==0.23
mccabe==0.5.2
msgpack-python==0.4.8
packaging==16.8
pathspec==0.3.4
psycopg2==2.7.1
pyasn1==0.1.9
pyasn1-modules==0.0.7
pycparser==2.17
pylint==1.6.4
pyOpenSSL==0.15.1
pyparsing==2.2.0
pyserial==3.0.1
python-dateutil==2.5.3
PyYAML==3.12
requests==2.9.1
selenium==3.0.0
semantic-version==2.5.0
service-identity==16.0.0
six==1.10.0
texttable==0.8.4
Twisted==16.0.0
virtualenv==15.1.0
wcwidth==0.1.7
websocket-client==0.37.0
Werkzeug==0.11.15
whitenoise==3.3.0
wrapt==1.10.8
zope.interface==4.1.3
Project structure:
.
├── ./db.sqlite3
├── ./manage.py
├── ./mrp
│ ├── ./mrp/admin.py
│ ├── ./mrp/apps.py
│ ├── ./mrp/forms.py
│ ├── ./mrp/__init__.py
│ ├── ./mrp/migrations
│ ├── ./mrp/models.py
│ ├── ./mrp/models.pyc
│ ├── ./mrp/static
│ │ └── ./mrp/static/mrp
│ │ ├── ./mrp/static/mrp/custom.css
│ │ ├── ./mrp/static/mrp/custom.js
│ │ └── ./mrp/static/mrp/images
│ ├── ./mrp/templates
│ ├── ./mrp/tests.py
│ ├── ./mrp/urls.py
│ └── ./mrp/views.py
├── ./Procfile
├── ./py_mrp
│ ├── ./py_mrp/__init__.py
│ ├── ./py_mrp/local_settings.py
│ ├── ./py_mrp/production_settings.py
│ ├── ./py_mrp/settings.py
│ ├── ./py_mrp/urls.py
│ └── ./py_mrp/wsgi.py
├── ./requirements.txt
└── ./templates
Thanks!
What is Django? Django is a high-level Python web framework that enables rapid development of secure and maintainable websites. Built by experienced developers, Django takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel.
The wildly popular Django Unchained is the most talked about film of the last month, and aside from the controversy, it's popular because of how badass Django is. However, nobody knew about the real Django–a man named Bass Reeves–whom became a Deputy U.S. Marshal in 1875 at the age of 38.
Python has a set of language and object-oriented approach that helps programmers create clear and logical code. Django is a web development python framework that makes it easy to build powerful web applications.
“The technically correct answer,” Willison told me when I asked him about this, “is that a backend framework like Django works with any frontend framework, because of separation of concerns: if a web framework can respond to HTTP requests with JSON and HTML, it can be used with anything.”
You are referencing the gettingstarting
wsgi module (file) which is nowhere inside your project.
Instead change the Procfile
contents to:
web: gunicorn PROJECT_NAME.wsgi --log-file -
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With