LINUX.ORG.RU

nginx + uwsgi + django на centos 5

 , , , ,


0

3

пытаюсь настроить nginx + uwsgi + django на centos 5

в браузере

uWSGI Error

Python application not found

в логе uwsgi пишет

Traceback (most recent call last):
  File «/var/www/domen.ru/site/wsgi.py», line 28, in ?
    from django.core.wsgi import get_wsgi_application
  File «/usr/lib/python2.6/site-packages/django/core/wsgi.py», line 1, in ?
    from django.core.handlers.wsgi import WSGIHandler
  File «/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py», line 10, in ?
    from django.core.handlers import base
  File «/usr/lib/python2.6/site-packages/django/core/handlers/base.py», line 5, in ?
    from django.utils.encoding import force_unicode
  File «/usr/lib/python2.6/site-packages/django/utils/encoding.py», line 8, in ?
    from django.utils.functional import Promise
  File «/usr/lib/python2.6/site-packages/django/utils/functional.py», line 3, in ?
    from functools import wraps, update_wrapper
ImportError: No module named functools
unable to load app 0 (mountpoint=") (callable not found or import error)
[pid: 25254|app: -1|req: -1/8] ххх.ххх.х.ххх () {44 vars in 756 bytes} [Sun May  6 14:12:51 2012] GET / => generated 48 bytes in 11 msecs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)

как я понял wsgi.py не может найти джангу, но при этом в шелле, если я запускаю ide питона все ок есть подозрение что мешает «стандартный» для центоса python 2.4 и uwsgi запускает его вместо python 2.6, хотя под рутом создал алиас для нового python как указать uwsgi какой питон использовать ?

i need help!


хотя под рутом создал алиас для нового python

Вот зря вы это. Основная идея зачем центос ставится на сервера - это надежность. Поэтому все свои хитрости по настройке сервисов и приложений надо делать так чтобы они ни в коем случае не затрагивали системные утилиты, тем более питон.

Нужен python26 - ставим такой пакет _рядом_ с основным и не мешая ему. Нужен модуль апача использующий питон 2.6 - опять-таки собираем его и ставим паралельно стандартному, так чтобы никакие конфиги и бинарники не пересекались.

Вот примерно таким образом: http://chrislea.com/2009/09/09/easy-python-2-6-django-on-centos-5/

alpha ★★★★★ ()

ImportError: No module named functools

как бы вот.

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

вообщем согласен, но центос поставил вынуждено, о чем до сих пор жалею. до этого всегда было федорино горе, которое всем устраивало не смотря на свою «ненадежность». нет у меня каких-то особо критичных задач на сервере и админ из меня никакой, чтобы регулярно разбираться с хитросплетениями древнейшего софта в репах пятерки и альтернативных подключенными мной с более свежими версиями.

по вашей ссылке не uwsgi, а mod_python и потом в плане надежности и безопасности ставить «my Yum repository» тоже не самый удачный вариант

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

видел эту штуку вчера, а сейчас даже поставил от бехисходности, но ничего не изменилось абсолютно, только появился еще один питон посвежее

и да кстати при установке оно ругнулось на то что у меня старый питон, пришлось поправить в установщике пути к питону =))

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

и потом в плане надежности и безопасности ставить «my Yum repository» тоже не самый удачный вариант

Ну так надо не ставить чей-то «My Yum repository», а сделать свой собственный. Не так это страшно вобщем-то, пересобрать три-четыре пакета. Ну или совсем локально поставить, из исходников, в хомяке. Тоже более менее живучий вариант.

но центос поставил вынуждено

А вынужденно почему? Просто у меня тут на fastVPS сначала тоже «вынужденно» поставили centos 5, но после одного письма в техподдержку в течение получаса нашли и предоставили centos 6, который они по-видимому просто забыли вывесить на всеобщее обозрение. Может и у тебя так?

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

у меня как-то сложилось пару лет назад что centos и все теперь, сетапить заново и звонить немцам смысла не вижу

собственно проблема локализована мне кажется- как сказать uwsgi, что надо запускать python2.6 а не python2.4 ?

radex ()

Кто виноват?
functools добавили только в python2.5 => последние версии Django не поддерживают python2.4

Что делать?
1. Установить в систему новую версию питона. Можно взять здесь: ftp://ftp.pycopia.org/pub/python/RHEL51/python2.7-2.7.1-1TH.src.rpm
2. установить virtualenv: $ sudo pip install virtualenv
3. создать виртуальное окружение: $ virtualenv -p /usr/bin/python2.7 /путь/проекта
4. запустить созданное виртуальное окружение: $ /путь/проекта/bin/activate
5. установить внутри виртуального окружения django
6. добавить в конфиг uwsgi параметр virtualenv с указанием пути к вирт. окружению
7. PROFIT

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

Ага, а еще там фигурирует 2.4. Очевидно, что 2.6 не превращается в тыкву от недостатка functools, из чего я прихожу к выводу, что ТС запускает 2.4 с измененным sys.path.

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

смысл твоего появления в топике? аву шикарную засветить?

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

спасибо за подсказку на тему virtualenv поставил virta теперь не получается запустить uwsgi у меня был скрипт запускающий его в init.d, после activate при запуске uwsgi

ругается virtualenv, как его правильно запустить?

<pre> There must be only one argument: DEST_DIR (you gave = /var/www/domen.ru/) Usage: virtualenv [OPTIONS] DEST_DIR

Options: --version show program's version number and exit -h, --help show this help message and exit -v, --verbose Increase verbosity -q, --quiet Decrease verbosity -p PYTHON_EXE, --python=PYTHON_EXE The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 interpreter to create the new environment. The default is the interpreter that virtualenv was installed with (/usr/bin/python26) --clear Clear out the non-root install and start from scratch --no-site-packages Don't give access to the global site-packages dir to the virtual environment --system-site-packages Give access to the global site-packages dir to the virtual environment --unzip-setuptools Unzip Setuptools or Distribute when installing it --relocatable Make an EXISTING virtualenv environment relocatable. This fixes up scripts and makes all .pth files relative --distribute Use Distribute instead of Setuptools. Set environ variable VIRTUALENV_DISTRIBUTE to make it the default --extra-search-dir=SEARCH_DIRS Directory to look for setuptools/distribute/pip distributions in. You can add any number of additional --extra-search-dir paths. --never-download Never download anything from the network. Instead, virtualenv will fail if local distributions of setuptools/distribute/pip are not present. --prompt==PROMPT Provides an alternative prompt prefix for this environment Starting uwsgi: /opt/uwsgi/uwsgi: unrecognized option `--pythonpath' getopt_long() error </pre>

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

Покажи содержимое uwsgi.conf и wsgi.py (или как там у тебя называется скрипт, в которым есть WSGIHandler)

Чтобы разметка форума не сломала форматирование этих файлов, используй, пожалуйста, тег [code] или залей на любой пастебин. К примеру, http://paste.kde.org и кинь тут ссылку.

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

в продолжение истории, подскажите как правильно запустить все это с виртуаленв, beka ты где?

[root@CentOS-56-64-minimal ~]# cat /etc/default/uwsgi virtualenv = /var/www/domen.ru/ ---------------- [root@CentOS-56-64-minimal init.d]# cat /etc/init.d/uwsgi http://paste.kde.org/484880/ ---------------- [root@CentOS-56-64-minimal domen]# cat wsgi.py

"""
WSGI config for jobask project.

This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.

Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.

"""
import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "domen.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

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

# cat /etc/default/uwsgi

virtualenv = /var/www/domen.ru/

ну указал же вроде или он его не читает и надо указать в параметрах при запуске конфиг?

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

конфиг uwsgi ---> /etc/default/uwsgi и его содержимое
virtualenv = /var/www/domen.ru/

Это надо писать в конфигурационный файл проекта, которого у вас просто нет. Попробуйте в /etc/init.d/uwsgi в «DAEMON_OPTS» довабить " --virtualenv /var/www/domen.ru/ /var/www/domen.ru/proj/wsgi.py"

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

У тебя виртуальное окружение там содержится? Потому что у нормальных людей оно лежит где-то в ~/.virtualenvs/blah

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

в /etc/init.d/uwsgi впишите

DAEMON_OPTS="-x /var/www/uwsgi.xml"

и сам файл (uwsgi.xml) сохраните.

<uwsgi>
  <socket>127.0.0.1:9001</socket>
  <module>myapp</module>
  <processes>4</processes>
  <master/>
  <sharedarea>4</sharedarea>
  <harakiri>30</harakiri>
  <daemonize>/var/log/uwsgi.log</daemonize>
  <pidfile>/var/run/uwsgi.pid</pidfile>
  <home>/var/www/domen.ru/</home>
  <wsgi-file>/var/www/domen.ru/proj/wsgi.py</wsgi-file>
</uwsgi>
beka ()
Ответ на: комментарий от radex

502 Bad Gateway

Ошибка 502 означает, что что-то не так с бекендом, т.е. с uwsgi. Что именно не так можно узнать из файла /var/log/uwsgi.log

дай плиз контакт какой-нибудь- скайп, icq

Я не пользуюсь ни социальными сетями ни службами мгновенного обмена сообщениями.

beka ()
26 июля 2012 г.

попробуй установить uwsgi из под виртуального окружения и запускай его оттуда. source ~/env/bin/activate && pip install uwsgi ~/env/bin/uwsgi -s xxx -h ~/env ...

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