Как развернуть приложение Flask на pythonany везде с папкой в ​​качестве модуля - PullRequest
0 голосов
/ 08 декабря 2018

В настоящее время я пытаюсь развернуть свое первое приложение FLASK в PythonAnywhere.

Я не уверен, что это правильная терминология, но у меня есть папка в виде модуля, и я не могу найти правильный способ развертывания моего приложения.Я даже не уверен, с чего начать в решении этого вопроса.Любой совет?

Срезанный макет файла и папки

my init .py код:

import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='secret',
        DATABASE=os.path.join(app.instance_path, 'LAMA.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # database
    from . import db
    db.init_app(app)

    # authentication blueprint
    from . import auth
    app.register_blueprint(auth.bp)


    # blog blueprint - the main index
    # from . import blog
    # app.register_blueprint(blog.bp)
    # app.add_url_rule('/', endpoint='index')

    # book blueprint 
    from . import book
    app.register_blueprint(book.bp)
    app.add_url_rule('/', endpoint='index')

    return app

Я также подписался наСтраница отладки Python, где я сделал следующее:

>>> import LAMA
>>> print(LAMA)
<module 'LAMA' from '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'>

Итак, на этом этапе в моем файле конфигурации WSGI у меня есть:

import sys

path = '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'
if path not in sys.path:
    sys.path.append(path)

from LAMA import app as application

Я также пробовал много других комбинаций, таких как

path = '/home/ivanv257/LAMA_MAIN/LAMA/'
from init import app as application

path = '/home/ivanv257/LAMA_MAIN/'
from init import app as application

path = '/home/ivanv257/LAMA_MAIN/'
from LAMA import app as application

мой путь к исходному коду: / home / ivanv257 / LAMA_MAIN / LAMA, хотя я также пробовал разные комбинации, такие как / home / ivanv257 / LAMA_MAIN /

ОШИБКА ДЕТАЛИ:

2018-12-08 10:05:32,028: Error running WSGI application
2018-12-08 10:05:32,030: ModuleNotFoundError: No module named 'LAMA'
2018-12-08 10:05:32,030:   File "/var/www/ivanv257_pythonanywhere_com_wsgi.py", line 83, in <module>
2018-12-08 10:05:32,030:     from LAMA import app as application  # noqa

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Чтобы решить мою проблему, я изменил следующее (с некоторой помощью) из lama import create_app:

import sys

path = '/home/ivanv257/LAMA_MAIN/LAMA'
if path not in sys.path:
    sys.path.append(path)

from lama import create_app

application = create_app()

Мне также пришлось удалить из.просто импортировать

    import db
    db.init_app(app)

    # authentication blueprint
    import auth
    app.register_blueprint(auth.bp)
0 голосов
/ 08 декабря 2018

Вы рядом.Чтобы развернуть приложение, перейдите на страницу веб-приложений на панели пользователя.Если вы этого еще не сделали, нажмите кнопку «Добавить новое веб-приложение» и введите нужное название приложения.Затем на той же странице веб-приложения на панели инструментов прокрутите вниз до раздела «Код» страницы.Нажмите на «исходный код» a href и добавьте абсолютный путь (полный путь) к каталогу lama_main, в котором хранится файл init.py.

Далее нажмите ссылку «Файл конфигурации WSGI».В файле конфигурации WSGI для вашего приложения установите правильный путь к родительскому каталогу и импортируйте app из файла init.py:

import sys

# add your project directory to the sys.path
project_home = u'/home/your_user_name/lama_main'
if project_home not in sys.path:
  sys.path = [project_home] + sys.path

# import flask app but need to call it "application" for WSGI to work

from init import app as application #note that the module being imported from must be the file with "app" defined. 

Затем сохраните файл WSGI и вернитесь на панель веб-приложения.на вашей приборной панели.Нажмите кнопку «Обновить {имя вашего сайта}».Теперь вы сможете посещать сайт, нажав на главную ссылку вверху страницы.

...