Как использовать папки в моем проекте, используя Flask + WSGI? - PullRequest
0 голосов
/ 20 января 2019

Я могу успешно запустить приложение "hello world" с Flask + WSGI ... Но изменение структуры моего проекта с помощью "rout.py" внутри "папки" приводит к ошибке сервера ...

mod_wsgi (pid = 9): целевой сценарий WSGI '/var/www/myfirstapp/hello.wsgi' не может быть загружен как модуль Python.

mod_wsgi (pid = 9): при обработке WSGI возникла исключительная ситуацияскрипт '/var/www/myfirstapp/hello.wsgi'

из folder.routes import simple_page

ImportError: Нет модуля с именем folder.routes

Этодерево моего проекта:

├── folder
│   └── routes.py
├── hello.conf
├── hello.py
├── hello.wsgi
└── README.md

hello.py:

from flask import Flask
from folder.routes import simple_page # works in dev but not with wsgi.. Why?


app = Flask(__name__)
app.register_blueprint(simple_page)

rout.py:

from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound

simple_page = Blueprint('simple_page', __name__,
                        template_folder='templates')

@simple_page.route('/')
def index():
    try:
        return "Hello world"
    except TemplateNotFound:
        abort(404)

hello.conf

<VirtualHost *>
    ServerName example.com
    WSGIScriptAlias / /var/www/myfirstapp/hello.wsgi
    WSGIDaemonProcess hello python-path=/var/www/myfirstapp:/var/www/myfirstapp/.env/lib/python3.5/site-packages
    <Directory /var/www/myfirstapp>
       WSGIProcessGroup hello
       WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

hello.wsgi:

import sys
sys.path.insert(0, "/var/www/myfirstapp")
from hello import app as application

Примечание: я не понимаю, почему WSGI"хорошо" с этим rout.py в корневой папке (импорт маршрутов), но жалуется на (hello.py) импорт "folder.routes" в hello.py, если я помещаю тот же файл в "папку" ...

1 Ответ

0 голосов
/ 21 января 2019

Я нашел решение, ссылаясь на соответствующий модуль (папку) в строке hello.conf WSGIDaemonProcess:

pythonpath=/var/www/myfirstapp/.env/lib/python3.5/sitepackages:/var/www/myfirstapp/:/var/www/myfirstapp/folder

Чем в rout.py: вместо from folder.routes import simple_page мы имеем import routes.

Дерево проекта тоже немного изменилось:

├── myfirstapp
│   ├── folder
│   │   └── routes.py
│   └── __init__.py
├── hello.wsgi
└── README.md
...