Ошибка web2py wsgihandler.py при миграции с python2 на python3 - PullRequest
0 голосов
/ 24 августа 2018

После миграции приложения в web2py с python 2 на python 3 и тестирования его на localhost я попытался изменить конфигурацию используемого мной сервера, чтобы он работал с python 3.

После многих неудачных попыток заставить сервер работать, я понял, что продолжаю сталкиваться с той же самой ошибкой. Журнал ошибок apache показал, что wsgi не удалось прочитать строку, когда она должна была быть байтовой строкой, мне кажется, что есть часть конфигурации, которая все еще пытается использовать Python 2 для обработки приложения. Какие шаги я могу предпринять, чтобы полностью преобразовать файлы конфигурации Apache в python3 без переустановки всего этого?

Вот более подробная информация о том, что я пробовал:

-Изменить версию Python по умолчанию, используя альтернативы обновления

- Использование VirtualEnv для запуска приложения исключительно с Python 3

-Переустановка mod_wsgi другими методами, указав, что python3 должен использоваться, и обязательно включив его после

-Перезапись файлов .load и .conf в папке с модами.

-Обновление версии web2py

У меня заканчиваются идеи, и я был бы очень признателен за любую помощь. В настоящее время это журнал ошибок в apache2, после переустановки mod_wsgi (и, возможно, что-то напортачить):

[Fri Aug 24 10:07:19.397596 2018] [wsgi:error] [pid 6352:tid 140375914997504] <class 'int'>
[Fri Aug 24 10:07:19.397681 2018] [wsgi:error] [pid 6352:tid 140375914997504] 10
[Fri Aug 24 10:07:19.739994 2018] [wsgi:error] [pid 6352:tid 140375822579456] Loads pas\xc3\xb3
[Fri Aug 24 10:07:22.785048 2018] [wsgi:error] [pid 6352:tid 140375822579456] <class 'int'>
[Fri Aug 24 10:07:22.785121 2018] [wsgi:error] [pid 6352:tid 140375822579456] 10
[Fri Aug 24 10:07:23.022198 2018] [wsgi:error] [pid 6352:tid 140375830980352] Loads pas\xc3\xb3
[Fri Aug 24 10:40:31.558114 2018] [mpm_event:notice] [pid 6348:tid 140376080840576] AH00491: caught SIGTERM, shutting down

Мои файлы конфигурации apache:

apache.conf

WSGIDaemonProcess web2py user=www-data group=www-data


<VirtualHost *:80>

########################  Web2Py  ###############

WSGIProcessGroup web2py
WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py
WSGIPassAuthorization On

    <Directory /home/www-data/web2py>
        AllowOverride None
        Require all denied
        <Files wsgihandler.py>
            Require all granted
        </Files>
    </Directory>

  AliasMatch ^/([^/]+)/static/(?:_[\d]+.[\d]+.[\d]+/)?(.*) \
        /home/www-data/web2py/applications/$1/static/$2

  <Directory /home/www-data/web2py/applications/*/static/>
    Options -Indexes
    ExpiresActive On
    ExpiresDefault "access plus 1 hour"
    Require all granted
  </Directory>

  CustomLog /var/log/apache2/access.log common
  ErrorLog /var/log/apache2/error.log

</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/self_signed.cert
  SSLCertificateKeyFile /etc/apache2/ssl/self_signed.key

  WSGIProcessGroup web2py
  WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py
  WSGIPassAuthorization On

  <Directory /home/www-data/web2py>
    AllowOverride None
    Require all denied
    <Files wsgihandler.py>
      Require all granted
    </Files>
  </Directory>
AliasMatch ^/([^/]+)/static/(?:_[\d]+.[\d]+.[\d]+/)?(.*) \
        /home/www-data/web2py/applications/$1/static/$2

  <Directory /home/www-data/web2py/applications/*/static/>
    Options -Indexes
    ExpiresActive On
    ExpiresDefault "access plus 1 hour"
    Require all granted
  </Directory>

  CustomLog /var/log/apache2/ssl-access.log common
  ErrorLog /var/log/apache2/error.log
</VirtualHost>

wsgihandler.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
This file is part of the web2py Web Framework
Copyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu>
License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)


This is a WSGI handler
"""
import os
import sys
sys.path.insert(0, '/home/www-data/web2py')

# change these parameters as required
LOGGING = False
SOFTCRON = False

path = os.path.dirname(os.path.abspath(__file__))
os.chdir(path)

if not os.path.isdir('applications'):
    raise RuntimeError('Running from the wrong folder')

sys.path = [path] + [p for p in sys.path if not p == path]

import gluon.main

if LOGGING:
    application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase,
                                        logfilename='httpserver.log',
                                        profiler_dir=None)
else:
    application = gluon.main.wsgibase

if SOFTCRON:
    from gluon.settings import global_settings
    global_settings.web2py_crontype = 'soft'

моды с поддержкой / wsgi.conf:

WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py

моды с поддержкой / wsgi.load:

LoadModule wsgi_module modules/mod_wsgi.so
...