1

WHAT IS WORKING

I'm following wsgi documentation to run django. I'm testing that it's all working before start to use nginx. I succeeded running manage.py and loading the webpage in my browser:

python manage.py runserver 0.0.0.0:8000

enter image description here

WHAT IS NOT WORKING

The problem comes when I try to run it using uwsgi:

uwsgi --http :8000 --module metrics.wsgi

I can run it without errors, but when I try to load it in my browser I get AppRegistryNotReady error from uwsgi. Any idea about what could be the reason? This is my wsgi.py file:

import os, sys, site, django.core.handlers.wsgi

SITE_DIR = '/home/ubuntu/web/metrics.com/app/'
site.addsitedir(SITE_DIR)
sys.path.append(SITE_DIR)

os.environ['DJANGO_SETTINGS_MODULE'] = 'metrics.settings'
application = django.core.handlers.wsgi.WSGIHandler()

my project structure:

/ubuntu
    /www
        /metrics.com 
            /app         # here's my manage.py file
                metrics/ # here's my wsgi.py and settigs.py files

2 Answers 2

1

SOLUTION: An incorrect configuration in wsgi.py was making uWSGI unable to call the application. I solved it using this wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "metrics.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

And running uwsgi like this:

uwsgi --http :8000 --chdir /home/ubuntu/web/metrics.com/app --module gamemetrics.wsgi

Edit: using --chdir we set the base directory to use for --module.

Edit 2: In some cases, this can fix NGINX error: upstream prematurely closed connection while reading response header from upstream

Sign up to request clarification or add additional context in comments.

Comments

0

1): Highly recommend run uwsgi in emperor mode.

/usr/bin/uwsgi --emperor /etc/uwsgi --pidfile /var/run/uwsgi.pid --daemonize /var/log/uwsgi.log

2) Example wsgi.py for your project:

import os
import sys
ADD_PATH = ['/home/ubuntu/web/metrics.com/app/',]
for item in ADD_PATH:
    sys.path.insert (0, item)
os.environ['PYTHON_EGG_CACHE']= '/tmp/your-project-eggs'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

3) Example uwsgi config for project (put this in /etc/uwsgi) <- see i.1
------- project.yaml -------

uwsgi:
    print: Project Configuration Started
    socket: /var/tmp/metrics_uwsgi.sock
    pythonpath: /home/ubuntu/web/metrics.com
    env: DJANGO_SETTINGS_MODULE=app.settings
    module: app.wsgi
    chdir: /home/ubuntu/web/metrics.com/app
    daemonize: /home/ubuntu/web/metrics.com/log/uwsgi.log
    pidfile: /var/run/metrics_uwsgi.pid
    max-requests: 5000
    buffer-size: 32768
    harakiri: 30
    reload-mercy: 8
    master: 1
    no-orphans: 1
    touch-reload: /home/ubuntu/web/metrics.com/log/uwsgi
    post-buffering: 8192

4) Include in your nginx config

location /
    {
        uwsgi_pass unix:///var/tmp/metrics_uwsgi.sock;
        include uwsgi_params;
        uwsgi_buffers 8 128k;
     }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.