LINUX.ORG.RU

[Python][Flask][WSGI] Вопрос.

 , ,


0

1

Привет.

Не получается сделать связку wsgi+flask, т.е. не понимаю что именно необходимо написать в файл mywsgie.wsgi, что бы запустить какой-либо пустой скрипт. Как правильно сделать?

Это: http://werkzeug.pocoo.org/docs/deployment/mod_wsgi/

И это тоже читал: http://www.lonesomedev.com/?p=169

Спасибо.

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

Читал.

Я правильно понимаю, что достаточно добавить в файл mywsgi.wsgi

from yourapplication import app as application activate_this = '/path/to/env/bin/activate_this.py' execfile(activate_this, dict(__file__=activate_this))

Или я совсем не правильно все понял?

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

Пока вертится apache+nginx, хватает.

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

Стоп. Получается необходимо добавить только

from yourapplication import app as application

а, это:

activate_this = '/path/to/env/bin/activate_this.py' execfile(activate_this, dict(__file__=activate_this))

необходимо при использовании virtualenv?

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

необходимо при использовании virtualenv?

Естественно.

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

Похоже я что-то делаю не так, добавил в mywsgi.wsgi строку

from flaskr import app as application

Скопировал пример flaskr, и положил рядом с myqsgi.wsgi, но получаю ошибку 500, я понимаю в каких случаях ее можно получить, но как в данном случае сделать правильно?

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

но получаю ошибку 500

На это может быть тысяча причин. Честно говоря, с mod_wsgi, дела не имел, поэтому даже не посоветую какие логи смотреть для диагностики.

Из предположений:

1. Неправильные права.

2. У апача есть ограничения на местоположение стартовых wsgi скриптов.

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

Хорошо, буду разбираться, спасибо.

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

fapws нормальный?

Пока проблем не было. Единственная неприятность — у него нет встроенного диспетчера, поэтому приходиться поднимать несколько инстансов и балансить через nginx. Но это решилось написанием маленького менеджера.

А так быстр и стабилен.

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

Чет ничего не получается, может в коде что-то не так, если не сложно подскажешь?

saa-site.wsgi

    import sys
    sys.path.insert(0, "/home/www/sa-abramyan.org")
     
    from app import app
    application = app

app.py

    from flask import Flask
    app = Flask(__name__)
     
    @app.route('/')
    def hello_world:
            return "Hello World!"
     
    if __name__ == '__main__'
            app.run()

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

Чет ничего не получается, может в коде что-то не так, если не сложно подскажешь?

Ты чего-то не то делаешь.

Вот пример запуска с созданием сокета (и дальнейшим его указанием на сервере для FastCGI)

from flup.server.fcgi import WSGIServer
from myfunnyapp import app

sock = '/var/run/myfunnyapp/app.sock'

WSGIServer(app, bindAddress=sock).run()
anonymous
()
Ответ на: комментарий от SAA

>Спасибо. Но хочется понять, почему не получается сделать это с помощью wsgi

WSGI это вообще-то спецификация.

А апач лучше выкинуть, если на нём не крутится что-либо ещё, т.к. его монструозность в данном случае просто не нужна. Файлы отдавать и nginx может.

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

Так работает не только этот скрипт, это так сказать обучение.

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

Попробую сейчас запустить на одном nginx с fastcgi

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

Я наверно не правильно сейчас написал конфигурацию для nginx:

server {
        listen 80;
        server_name sa-abramyan.org;

        location = /home/www/sa-abramyan.org { rewrite ^ /home/www/sa-abramyan.org/ last; }
        location /home/www/sa-abramyan.org { try_files $uri @saa-site; }
        location @saa-site {
                include fastcgi_params;
                fastcgi_split_path_info ^(/home/www/sa-abramyan.org)(.*)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                fastcgi_pass unix:/home/www/sa-abramyan.org/fcgi.sock;
        }
}

Только вот не пойму, где ошибка.

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

а в файле myfcgi.fcgi, следующее:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from myapp import app

WSGIServer(app, bindAddress='/home/www/sa-abramyan.org/fcgi.sock').run()

if __name__ == '__main__':
    WSGIServer(app).run()
SAA ★★★
() автор топика
Ответ на: комментарий от SAA

подозреваю что локейшны неправильные

server {
    ...
    root /home/www/sa-abramyan.org;
    location / {
        try_files $uri @ssa;
    }
    location @ssa {
        ...
    }
}
anonymous
()
Ответ на: комментарий от anonymous
srwxr-xr-x 1 root root 0 Jul 21 11:01 fcgi.sock

тут походу с правами беда.

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

Да, скорее всего я запутался с location, сейчас поменял на такое:

location = /saa-site { rewrite ^ /home/www/sa-abramyan.org/ last; }
        location / { try_files $uri @saa-site; }
        location @saa-site {
                include fastcgi_params;
                fastcgi_split_path_info ^(/)(.*)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                fastcgi_pass unix:/home/www/sa-abramyan.org/fcgi.sock;
        }

и появилась 502 ошибка, и я так понял там с правами что-то не так.

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

я запускаю в консоли так: ./myfcgi.fcgi и получается от рута, как можно запустить в фоне и под тем пользователем что-бы nginx смог получить доступ?

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

Запустил командой:

spawn-fcgi -u www-data -g www-data -d /home/www/sa-abramyan.org -f /home/www/sa-abramyan.org/saa-site.fcgi -s /home/www/sa-abramyan.org/fcgi.sock

опять 502 ошибка, вот что в логах:

011/07/21 11:14:52 [error] 7963#0: *3 connect() to unix:/home/www/sa-abramyan.org/fcgi.sock failed (111: Connection refused) while connecting to upstream, server: sa-abramyan.org, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/home/www/sa-abramyan.org/fcgi.sock:", host: "sa-abramyan.org"
SAA ★★★
() автор топика
Ответ на: комментарий от SAA

>я запускаю в консоли так: ./myfcgi.fcgi и получается от рута, как можно запустить в фоне и под тем пользователем что-бы nginx смог получить доступ?

Запускай от пользователя, это ж не проблема. Собственно, это и есть основное преимущество такой схемы.

Да и вообще, напиши инитскрипт под свой дистрибутив, будешь делать /etc/init.d/myproject start.

Или просто nohup /path/to/script &

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

я выше написал, уже разобрался как запускать его более менее правильно, но теперь другая проблемка.

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

Да и вообще, напиши инитскрипт под свой дистрибутив, будешь делать /etc/init.d/myproject start.

уже готово, но проблема не в этом, к сожалению

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

>уже готово, но проблема не в этом, к сожалению

Призови в тред специалистов по nginx, там должно быть всё просто.

// я всё с lighttpd делаю, потому ничего не посоветую тут.

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

Короче, попробуй так:

#skip
WSGIServer(app, bindAddress=('0.0.0.0', 4000))
#skip

И настрой nginx не по сокету, а по порту. Потому что у тебя могут быть проблемы с правами, а тут ты сразу всё увидишь.

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

% spawn-fcgi ... -M 666 ...

насчет биндить как тцп-сокет, лучше 127.0.0.1, а не 0.0.0.0, ибо секурнее

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

спасибо, так заработало, осталось с правами разобраться.

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