heroku上的gunicorn导入错误

2024-04-23 13:50:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能用简单的烧瓶应用程序在heroku上运行gunicorn 应用程序非常简单,this 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上的flask测试服务器,该应用运行良好 当我切换到使用gunicorn时,它会崩溃:

ImportError: No module named app.wsgiapp

我的要求.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

给予

←[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__'])

有什么需要帮忙的吗

谢谢


Tags: nonameapp应用程序flaskheroku烧瓶port
3条回答

我终于想出了这个办法。

这基本上只是一个路径问题。如果根据您的设置以错误的顺序导入某些模块(如ossys),则会导致Gunicorn查找app.wsgiapp模块的错误包。(不要与烧瓶中的app.wsgi_app功能混淆)

正确的导入顺序将根据您的设置而有所不同,但基于我所能得到的结果,经验法则是确保在导入os模块之前先导入sys模块。

除此之外,假设配置的其余部分是正常的(如上所述),您不应该有任何问题。

注:这只是一个问题的英雄与古尼孔。这与他们的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

而在mv gunicorn.py gunicorn_config.py之后,它可以很好地处理:

gunicorn -c gunicorn_config.py myapp:main

我在把Ubuntu升级到14.04lts时遇到了这个问题。

由于某种原因,gunicorn未能获取正确的python路径来解析wsgi模块。

现在,我通过通过--pythonpath参数(文档化的here)显式地将python路径声明为gunicorn,解决了这个问题。

例如:

gunicorn --pythonpath /path/to/containing/directory "app.wsgi_app:wsgi_app"

相关问题 更多 >