2016-12-12 3 views
0

У меня есть колба приложение работает просто отлично с сервером Дев, когда я запускаю его, как это:колба приложение терпит неудачу при загрузке с WSGI, но прекрасно работает с Dev сервера

python manage.py runserver 

Но когда я пытаюсь запустить его с wsgi я получаю всевозможные ошибки «модуль не установлен» и даже синтаксические ошибки. Как ни странно, каждый раз, когда я попадал в маршрут приложения, он показывает другую ошибку.

на некоторых ошибках, из вывода в журнале ошибок apache, я вижу, что он пытается запустить 2,7 версии пакетов, когда я использую 3.4.

File "/usr/lib/python2.7/dist-packages/requests/__init__.py", line 55, in <module> 

Я не знаю, почему это, питон 3 по умолчанию на сервере и

$ python --version 
Python 3.4.2 

является выходным для каждого пользователя системы. Я я с помощью virtualenv, но я следовать этим инструкциям по настройке mod_wsgi с virtualenv: http://flask.pocoo.org/docs/0.11/deploying/mod_wsgi/

мой файл WSGI выглядит следующим образом:

import sys 

activate_this = '/home/flask-dev/es_app/venv/bin/activate_this.py' 
with open(activate_this) as file_: 
    exec(file_.read(), dict(__file__=activate_this)) 

print(sys.path) 

from searchapp import app as application 

и печать (sys.path) выводит это когда Я бегу это как «питон run.wsgi»:

['/home/flask-dev/es_app/venv/lib/python3.4/site-packages', '/home/flask-dev/es_app', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/lib/python3/dist-packages'] 

т.е. путь к 2.7 пакетов не видно. Кроме того, все необходимые модули :, установленный в моем virtualenv, поэтому он отлично работает при запуске dev-сервера.

Полностью затопленный на этом. Любая помощь оценивается.

ответ

1

Вы должны указать Apache, который должен использовать Python для запуска процессов python. Без явной конфигурации Apache, вероятно, берет первый «python», присутствующий в системном пути. (Не На самом деле нет, см комментарии ниже. Распределение по умолчанию питона используется.)

К сожалению, похоже, что вам нужно перекомпилировать mod_wsgi, как питон ехе может быть изменен только configure сценария.

http://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#multiple-python-versions

В вашем случае: ./configure --with-python=/home/flask-dev/es_app/venv/bin/python

Это много работы, что должно быть просто. Обычно я просто использую Apache в режиме обратного прокси (благодаря mod_proxy) и указываю его на внешний сервер WSGI, такой как Gunicorn (http://gunicorn.org/) или Waitress (http://docs.pylonsproject.org/projects/waitress/en/latest/).

+0

Хороший звонок при перекомпиляции модуля - я полностью забыл об этом. Да, все это должно быть проще. Но я думаю, именно поэтому колба по-прежнему v0.11. Мне нравится ваша идея использования uWSGI, мне было любопытно узнать, есть ли преимущество ресурсов (или недостаток)? – tarponjargon

+0

uWSGI? Нет, я не упоминал об этом :) Но да, это еще одна возможность. Во всех случаях у вас есть процессы Apache и python. С Apache + mod_wsgi они тесно связаны. С mod_proxy + внешним WSGI-сервером это не так. Я думаю, что потребляемые ресурсы больше зависят от настройки конфигурации (сколько процессов/потоков), чем от типа используемого WSGI. –

+1

Неправильное описание. При использовании mod_wsgi он не использует первый «python», присутствующий в системном пути.Вместо этого mod_wsgi скомпилирован для конкретной версии Python и напрямую связан с общей библиотекой Python. Решение действительно заключается в том, чтобы переустановить mod_wsgi с версией, которая скомпилирована для версии Python, которую вы хотите использовать. Обычно дистрибутив Linux имеет это для основных потоков Python, которые он предоставляет, поэтому все, что вам нужно сделать, это удалить версию mod_wsgi для Python 2 и установить его для Python 3. –

 Смежные вопросы

  • Нет связанных вопросов^_^