Ошибка с выпуском оружия против герою
Я не могу запустить gunicorn on heroku с помощью простого флеш-приложения
приложение действительно просто, это app.py
app = Flask(__name__)
@app.route("/")
def say_hello(url):
return "Hello"
if __name__ == "__main__":
port = int(os.environ.get('PORT', 8888))
app.run(host='0.0.0.0',port=port)
приложение работает отлично через тестовый сервер флагов на героку
когда я переключаюсь на использование пушки, он падает с:
ImportError: No module named app.wsgiapp
my requirements.txt:
Flask==0.8
gevent==0.13.7
gunicorn==0.13.2
Я пробовал разные версии стрельбы из 0.13.7 до 0.14.6 без успеха
PROCFILE:
web: gunicorn app:app -w 4 -b 0.0.0.0:$PORT
команда:
heroku logs
дает
←[33m2012-08-09T21:08:02+00:00 app[web.1]:←[0m ImportError: No module named app.
wsgiapp ←[33m2012-08-09T21:08:02+00:00 app[web.1]:←[0m entry = __import__(self.modul
e_name, globals(),globals(), ['__name__'])
Любая помощь пожалуйста
Спасибо
Джо
Ответы
Ответ 1
В моем случае я получил эту ошибку, имея файл gunicorn.py
в моей папке верхнего уровня. Это столкнулось с установленной библиотекой орудийного боя на Хереку.
Итак, моя команда запуска, вызвавшая проблему, была:
gunicorn -c gunicorn.py myapp:main
Вызов следующей ошибки:
Traceback (most recent call last):
File "/app/.heroku/python/bin/gunicorn", line 9, in <module>
load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
return ep.load()
File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named app.wsgiapp
В то время как после mv gunicorn.py gunicorn_config.py
он отлично работал с:
gunicorn -c gunicorn_config.py myapp:main
Ответ 2
Я столкнулся с этой проблемой при обновлении Ubuntu до 14.04 LTS.
По какой-то причине gunicorn
не удалось найти правильный путь python для разрешения модуля wsgi.
Я решил это, пока, объявив путь python явно gunicorn
с помощью параметра --pythonpath
(зарегистрированный здесь).
Например:
gunicorn --pythonpath /path/to/containing/directory "app.wsgi_app:wsgi_app"
Ответ 3
Я, наконец, понял это.
В основном это проблема PATH. Если вы импортируете определенные модули (например, os и sys) в неправильном порядке, в зависимости от вашей установки, вы заставите Gunicorn искать неправильный пакет для приложения .wsgiapp. (не путать с функцией app.wsgi_app в Flask)
Правильный порядок импорта будет зависеть от вашей настройки, но эмпирическое правило, основанное на том, что я смог получить, состояло в том, чтобы убедиться, что ваш sys модуль импортирован до вашего os.
Помимо этого, если остальная часть конфигурации является нормальной (как указано выше), у вас не должно быть проблем.
Примечание: ЭТО ТОЛЬКО ПРОБЛЕМА НА ГЕРОКУ с Гуйкорном. Это имеет какое-то отношение к тому, как настроен их путь PYTHONPATH и модуль поиска. Я не знаю, почему именно, но это необходимо только для рабочей среды, локальные настройки будут работать нормально, независимо от порядка импорта модуля.
Ответ 4
Мое предположение, что в пути python есть другой модуль "app" (как у пушки, так и с флягой уже есть модуль, называемый приложением).
Переименуйте его иначе, чем app.py, и он должен работать.