Python heroku上的gunicorn导入错误
我无法在heroku上使用简单的flask应用程序运行gunicorn 应用程序非常简单,这个app.pyPython heroku上的gunicorn导入错误,python,heroku,flask,wsgi,gunicorn,Python,Heroku,Flask,Wsgi,Gunicorn,我无法在heroku上使用简单的flask应用程序运行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) 通过her
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上的flask测试服务器,该应用程序运行良好
当我切换到使用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,但没有成功
程序文件:
web: gunicorn app:app -w 4 -b 0.0.0.0:$PORT
运行命令:
heroku logs
给予
需要帮忙吗
谢谢
Joe我猜python路径中还有另一个“app”模块(gunicorn和flask已经有了一个名为app的模块)。
将其重命名为app.py以外的任何名称,它都应该可以工作。我终于找到了这个名称 这基本上只是一个路径问题。如果根据您的设置以错误的顺序导入某些模块(如os和sys),则会导致Gunicorn在错误的软件包中查找app.wsgiapp模块。(不要与烧瓶中的app.wsgi_app功能混淆) 正确的导入顺序将根据您的设置而有所不同,但基于我能够工作的经验法则是确保在导入os模块之前导入您的sys模块 除此之外,假设配置的其余部分正常(如上所述),您不应该有任何问题
注意:这只是HEROKU和Gunicorn的问题。这与PYTHONPATH和模块搜索路径的设置有关。我不知道确切的原因,但这只是生产环境所必需的,无论模块导入顺序如何,本地设置都可以正常工作。在我的例子中,我在顶层文件夹中有一个
gunicorn.py
文件,因此出现了此错误。这与Heroku上安装的gunicorn库发生冲突
因此,导致问题的run命令是:
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
我在升级Ubuntu到14.04 LTS时遇到了这个问题 出于某种原因,
gunicorn
未能选择正确的python路径来解析wsgi模块
现在,我解决了这个问题,通过--pythonpath
参数(文档化)将python路径显式声明为gunicorn
例如:
gunicorn --pythonpath /path/to/containing/directory "app.wsgi_app:wsgi_app"
您是否尝试过更新的gunicorn版本,如heroku在其示例中指定的0.14.6?是,不会更改任何内容。这些内容不可能是整个app.py文件。从顶部添加导入。@Joseph您做了什么来修复此问题?我现在也有同样的问题。我不知道为什么gunicorn会从“工作”变为“不工作”。这里也是一样,可能是最简单的配置,在我切换到使用gunicorn配置文件之前它是工作的。我不这么认为,因为当我将模块重命名为类似于另一个应用程序的东西时,我在新模块名上遇到了相同的错误。你能记录repr(应用程序)吗崩溃前的PYTHON_路径环境变量?如何?Gunicorn本身正在崩溃。。。。它甚至没有进入我的代码。。。任何要演示的代码片段我该怎么做?它试图访问wsiapp,这是flask应用程序的现有属性。因此,必须加载您的代码。只需在模块文件的主体中添加一些内容。还可以使用--log level=debugh运行gunicorn。我发现情况就是这样,请参阅我在上面关于更改导入顺序的回答。
gunicorn -c gunicorn_config.py myapp:main
gunicorn --pythonpath /path/to/containing/directory "app.wsgi_app:wsgi_app"