我不能用简单的烧瓶应用程序在heroku上运行gunicorn 应用程序非常简单,这个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)
该应用程序在heroku上通过烧瓶测试服务器正常工作 当我切换到使用gunicorn它崩溃时:
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的不同版本的gunicorn但没有成功
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__'])
请帮助
由于
乔
答案 0 :(得分:10)
在我的情况下,我在顶级文件夹中有一个gunicorn.py
文件,从而出现此错误。这与Heroku上安装的gunicorn库冲突。
因此导致问题的运行命令是:
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
答案 1 :(得分:4)
我在将Ubuntu升级到14.04 LTS时遇到了这个问题。
由于某种原因,gunicorn
未能找到正确的python路径来解析wsgi模块。
我现在解决了这个问题,方法是通过gunicorn
参数(记录为here)将python路径明确声明为--pythonpath
。
例如:
gunicorn --pythonpath /path/to/containing/directory "app.wsgi_app:wsgi_app"
答案 2 :(得分:3)
我终于想出了这个。
这基本上只是一个PATH问题。如果您根据设置导入某些模块(如 os 和 sys )的顺序错误,则会导致Gunicorn查找错误的应用程序包.wsgiapp 模块。 (不要与Flask中的 app.wsgi_app 功能混淆)
正确的导入顺序会因您的设置而异,但根据我的工作原理,经验法则是确保在您的 sys 模块> os 模块。
除此之外,假设配置的其余部分正常(如上所述),您不应该有任何问题。
注意:这只是Heroku与Gunicorn的问题。它与他们的PYTHONPATH和模块搜索路径的设置方式有关。我不知道原因究竟是什么,但这只是生产环境所必需的,无论模块导入顺序如何,本地设置都能正常工作。
答案 3 :(得分:1)
我的猜测是python路径中还有一个“app”模块(gunicorn和flask都有一个名为app的模块)。 重命名除app.py以外的任何东西,它应该可以工作。