2016-03-22 5 views
1

Я запускаю приложение Python/Flask на Python 3.5 в virtualenv на Arch Linux. Приложение запускается сервером uwsgi, который подключается через сокет к Nginx.Приложение флеши на uwsgi дает TypeError: объект «Flask» не итерируется

Когда я выполнить запрос, я получаю следующую uwsgi ошибку:

Mar 23 02:38:19 saltminion1.local uwsgi[20720]: TypeError: 'Flask' object is not iterable 

Это отозваны, что uwsgi настроен на использование:

def create_app(config=None, import_name=None): 
    if import_name is None: 
     import_name = DefaultConfig.PROJECT 

    app = Flask(import_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True) 

    configure_app(app, config) 
    configure_database(app) 
    configure_logging(app) 
    configure_error_handlers(app) 
    configure_blueprints(app) 

    return app 

вещи работают хорошо, когда я запустить приложение используя встроенный HTTP-сервер как на локальной рабочей станции разработки OS X, так и на брандмауэрах Arch/Ubuntu.

Проблема заключается в следующем: после добавления операторов отладки стало ясно, что ошибка возникает в какой-то момент самого флеш-кода, а не в моем приложении. Как я могу получить трассировку стека здесь для устранения неполадок лучше?

+0

Можете ли вы показать файл, который определяет вызываемый вами, который вы передаете 'uwsgi'? – Suever

+0

Обновленный с помощью соответствующего метода, я могу добавить больше методов, если это необходимо. –

+0

Ваш вопрос вдохновил меня добавить еще отладочный код, и я быстро выяснил эту проблему. Спасибо за этот вопрос! Это заставило меня переосмыслить всю настройку. Я добавлю ответ. –

ответ

2

Приложение WSGI (в котором находится флажок), является вызываемым объектом. Это то, что uWSGI ожидает передать в callable. Вы передаете фабрику приложений, которая также называется вызываемой, но вам нужно передать ей результат этого вызова, потому что фабрика приложений не является самим приложением WSGI.

Заводская функция может быть вызвана непосредственно в конфигурации. Параметры module и callable также могут быть объединены только в module.

module = my_app:create_app() 

Это говорит uWSGI импортировать my_app, найти my_app.create_app, и назвать его. Результатом этого является приложение Flask, которое фактически используется в качестве вызываемого.

+0

Спасибо за этот ясный ответ, я считаю, что это будет очень полезно для людей, сталкивающихся с этим сообщением об ошибке. –

0

Нашел ответ: Я настроил uwsgi с помощью callable = create_app, который был функцией, которая возвращает приложение «Колба». Но uwsgi действительно хочет объект приложения.

+0

Я приму это через 2 дня. –

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