развертывание python flask приложения в apache 24 - PullRequest
0 голосов
/ 21 июня 2020

Я разработал приложение python (python 3,6 32 бит) flask, и мне нужно, чтобы оно было развернуто на сервере windows с 32-битным apache24.

Я упомянул шаги в https://medium.com/@madumalt / flask -app-deployment-in- windows - apache -server-mod-wsgi-82e1cfeeb2ed

Когда я пытаюсь запустить httpd.exe в apache24 я получаю ошибку ниже

[Sun Jun 21 20:36:15.112840 2020] [mpm_winnt:notice] [pid 20600:tid 476] AH00455: Apache/2.4.43 (Win32) mod_wsgi/4.7.1 Python/3.6 configured -- resuming normal operations
[Sun Jun 21 20:36:15.112840 2020] [mpm_winnt:notice] [pid 20600:tid 476] AH00456: Apache Lounge VS16 Server built: Apr 21 2020 16:02:41
[Sun Jun 21 20:36:15.112840 2020] [core:notice] [pid 20600:tid 476] AH00094: Command line: 'httpd.exe -d C:/Apache24'
[Sun Jun 21 20:36:15.123841 2020] [mpm_winnt:notice] [pid 20600:tid 476] AH00418: Parent: Created child process 2064
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00002dfc (most recent call first):
[Sun Jun 21 20:36:21.808509 2020] [mpm_winnt:crit] [pid 20600:tid 476] AH00419: master_main: create child process failed. Exiting.

Please find the SET configurations below,
OS=Windows_NT
Path=C:\Python36-32\Scripts\;C:\Python36-32\;C:\Program Files\Common Files\Micro
soft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Micros
oft Shared\Microsoft Online Services;C:\ProgramData\Oracle\Java\javapath;C:\Wind
ows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowe
rShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\


PYTHONHOME=C:\Python36-32\
PYTHONPATH=C:\Python36-32\Scripts\

1 Ответ

1 голос
/ 22 июня 2020

# 1 проверьте, есть ли у вас СТАРАЯ установка python, и удалите ее должным образом (включая старые переменные среды, путь ..)

# 2 Я бы порекомендовал вам, если возможно, обновить ваш python установка на последнюю 3.8.x +

# 3 ваша проблема очень распространена: ваши переменные среды НЕ установлены правильно:

  • go на вкладку Advanced под System Properties и щелкните Environment Variables
  • Под System Variables создайте эти переменные:
    • APACHE_HOME = C: \ wamp \ bin \ apache \ apache2.4.23 (я использую WAMPSERVER)
    • MOD_WSGI_APACHE_ROOTDIR = %APACHE_HOME% (так как вы используете mod_wsgi, проверьте официальный do c на pypi)
    • PYTHON_HOME = C: \ Python37 (это зависит от вашей python установки)
  • go в User variables и добавьте / добавьте переменные в PATH, например:
    • PATH = %APACHE_HOME%\bin;%MOD_WSGI_APACHE_ROOTDIR%;%PYTHON_HOME%;%PYTHON_HOME%\Scripts;

# 4 откройте новую консоль и проверьте установку python:

  • python --version

# 5 создайте простое приложение flask, чтобы ything работает должным образом

  • py -m flask run

# 6 для развертывания приложения на сервере Apache, посмотрите на это flask do c и официальный mod_wsgi do c

  • вам необходимо установить mod_wsgi GLOBALLY , то есть вам необходимо сначала деактивируйте вашу виртуальную среду вашего текущего активного приложения.
  • (venv) C:\myapps\flask\helloflask>deactivate (я использую venv стандартную и стандартную python виртуальную среду py -m venv venv)
  • C:\myapps\flask\helloflask>pip install mod_wsgi
  • C:\myapps\flask\helloflask>pip list

# 7 configure mod_wsgi in Apache Server

  • проверьте правильность mod_wsgi установлен и настроен
C:\myapps\flask\helloflask>mod_wsgi-express --help
Usage: mod_wsgi-express command [params]

Commands:
    module-config
    module-location

mod_wsgi-express: error: Invalid command was specified.
  • запустите эту команду:
mod_wsgi-express module-config
  • вывод команды должен быть следующим (в зависимости от ваша система и python установка):
    WSGIPythonHome "c:/python37"
    LoadFile "c:/python37/python37.dll"
    loadmodule wsgi_module "c:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win32.pyd"
  • Скопируйте вывод указанной выше команды и вставьте его в C:\wamp\bin\apache\apache2.4.23\conf. Чтобы все было согласовано, найдите раздел, в котором перечислены модули, и добавьте его в самый конец списка.

# 8 создайте wsgi.py под root вашего проекта и вставьте код (это говорит само за себя)

import os
import sys

# activate virtualenv
PROJECT = "helloflask"

# i'm using py -m venv venv
# @see: https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html
# @see: https://stackoverflow.com/questions/25020451/no-activate-this-py-file-in-venv-pyvenv
activate_this = os.path.join('C:/myapps/flask', PROJECT, 'venv/Scripts/activate_this.py')
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

BASE_DIR = os.path.join(os.path.dirname(__file__))
if BASE_DIR not in sys.path:
    sys.path.append(BASE_DIR)

from helloflask import create_app
application = create_app() 

# 9 Настройте виртуальный хост для приложения Flask

<VirtualHost *:80>

    ServerName helloflask.local

    DocumentRoot "C:/myapps/flask/helloflask"

    WSGIScriptAlias / "C:/myapps/flask/helloflask/wsgi.py"

    <Directory "C:/myapps/flask/helloflask">
        Require all granted
    </Directory>

    # app = Flask(
    #    __name__, 
    #    static_url_path='/public/static',
    #    static_folder='static'
    # )
    # Alias /public/static  "C:/myapps/flask/helloflask/public/static"
    # <Directory "C:/myapps/flask/helloflask/public/static">
    #    Require all granted
    # </Directory>
    
    ErrorLog "C:/wamp/logs/helloflask.error.log"
    CustomLog "C:/wamp/logs/helloflask.access.log" common

</VirtualHost>

# 10 проверьте свою Apache конфигурацию

  • httpd -t если все в порядке, перезагрузите сервер Apache
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...