LINUX.ORG.RU
ФорумAdmin

nginx + uwsgi + python на debian


0

1

Здравствуйте. Нужно запускать скрипты на python через веб-интерфейс. Связка nginx + uwsgi, устанавливал через

aptitude install nginx uwsgi uwsgi-plugin-python

Конфиги такие:


root@vm6097:~# cat /etc/nginx/sites-available/default
# You may add here your
# server {
#       ...
# }
# statements for each of your virtual hosts


server {
        listen   80; ## listen for ipv4
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        server_name  localhost;

        access_log  /var/log/nginx/localhost.access.log;
        root /var/www/;

        location / {
                access_log off;
                index  index.html index.php;
        }


        location ~ \.py$ {
                uwsgi_pass 127.0.0.1:8012;
                include uwsgi_params;
                root /home/quux/python/letmedraw_com;
        }
}

Конфиг uWSGI:

root@vm6097:~# cat /etc/uwsgi/apps-available/letmedraw_com.ini
[uwsgi]
    plugins = python_plugin
    #plugins = python
    virtualenv = /home/quux/envs/letmedraw_com/
    chdir = /home/quux/python/letmedraw_com/
    pythonpath = ..
    env = DJANGO_SETTINGS_MODULE=example.settings
    module = django.core.handlers.wsgi:WSGIHandler()
    touch-reload = /home/quux/python/example/touchme
    #socket = unix:///home/quux/python/letmedraw_com/uwsgi.sock
    socket = 127.0.0.1:8012

Выдает в браузер:

uWSGI Error

Python application not found

Логи uWSGI:

root@vm6097:~# tail /var/log/uwsgi/app/letmedraw_com.log
[pid: 11782|app: -1|req: -1/5] 2.135.172.194 () {40 vars in 728 bytes} [Sun Mar 11 23:31:11 2012] GET /test.py => generated 48 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)
[pid: 11782|app: -1|req: -1/6] 2.135.172.194 () {40 vars in 728 bytes} [Sun Mar 11 23:31:11 2012] GET /test.py => generated 48 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)
Sun Mar 11 23:31:11 2012 - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /test.py (ip 2.135.172.194) !!!
Sun Mar 11 23:31:11 2012 - write(): Broken pipe [proto/uwsgi.c line 138] during GET /test.py (2.135.172.194)
Sun Mar 11 23:31:11 2012 - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /test.py (ip 2.135.172.194) !!!
Sun Mar 11 23:31:11 2012 - write(): Broken pipe [proto/uwsgi.c line 138] during GET /test.py (2.135.172.194)
[pid: 11783|app: -1|req: -1/7] 2.135.172.194 () {40 vars in 728 bytes} [Sun Mar 11 23:31:11 2012] GET /test.py => generated 0 bytes in 1 msecs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)

Сам файл test.py:

root@vm6097:~# cat /home/quux/python/letmedraw_com/test.py
#!/usr/bin/python

print 'hello'

Подскажите плиз что нужно поправить, чтобы браузер получал output из test.py?



Последнее исправление: bammm (всего исправлений: 1)

Ответ на: комментарий от anonymous

Упс, разметку поломал :3

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

anonymous
()
Ответ на: комментарий от anonymous

Изменил test.py на

#!/usr/bin/python

def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return "Hello World"

Ничего не изменилось

bammm
() автор топика

[code]

location ~ \.py$ {

module = django.core.handlers.wsgi:WSGIHandler()

[/code]

Ты ведь нифига не понимаешь что в конфигах понаписал, да?

anonymous
()
Ответ на: комментарий от anonymous
location ~ \.py$ {

это по аналогии с

location ~ \.php$ {
а module = django.core.handlers.wsgi:WSGIHandler() - действительно не понимаю

bammm
() автор топика
Ответ на: комментарий от bammm

это по аналогии с ... php

Так делать ни в коем случае не надо.
Все, что не статика - проксируй на само приложение.

а module = django.core.handlers.wsgi:WSGIHandler() - действительно не понимаю

у тебя само приложение на чем написано?

beka
()
Ответ на: комментарий от bammm

анонимус намекает что ты слепо скопировал конфиг от django который у тебя не используется. Поэтому ничего не работает. Тебе нужен свой конфиг

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Никак не могу найти нужный конфиг. Не подскажете?

bammm
() автор топика

В общем как у меня заработало:

/etc/nginx/sites-enabled/default

server {
    listen   80;
    server_name localhost;

    root /usr/share/nginx/www;
    index index.html index.htm;

    location /test_app/ { ## локейшн нашего приложения
        include uwsgi_params;
        uwsgi_pass unix:///var/run/uwsgi/app/test_app/socket;
    }

    location / {
        try_files $uri $uri/ /index.html;
    }
}

/etc/uwsgi/apps-enabled/test_app.ini

[uwsgi]
## типа тут можно всякие корявые опции понапихать
#socket = /var/tmp/uwsgi/test_app.sock
#chown-socket = www-data:www-data
#workers = 2

## вот самая главная опция в данном случае
file = /home/user/test_app/test_app.py

/home/user/test_app/test_app.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World\n"

Перезапускаем всё это счастье

service nginx stop
service nginx start
service uwsgi stop
## криво настроенный uwsgi может не выключаться по-человечески, тогда его придется киллять вручную
## см. ps aux | grep uwsgi и man kill
service uwsgi start

Должны появиться два файла

-rw-r--r-- 1 root     root     5 Мар 12 22:38 pid
srw-rw---- 1 www-data www-data 0 Мар 12 22:38 socket

Привильно работающая связка должна выдавать 'Hello World'

$ curl localhost/test_app/            
Hello World

неправильно работающая — 502 Bad Gateway

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.