繁体   English   中英

heroku上的gunicorn导入错误

[英]gunicorn import error on heroku

我不能用简单的烧瓶应用程序在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)

当我切换到使用gunicorn它崩溃时,应用程序在heroku上烧瓶测试服务器正常工作:

ImportError: No module named app.wsgiapp

我的requirements.txt:

Flask==0.8
gevent==0.13.7
gunicorn==0.13.2

我试过不同版本的gunicorn从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__'])

请帮忙

谢谢

在我的情况下,我通过在我的顶级文件夹中有一个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

我在将Ubuntu升级到14.04 LTS时遇到了这个问题。

出于某种原因, gunicorn未能找到正确的python路径来解析wsgi模块。

我现在通过--pythonpath参数( 在此处记录 )将python路径明确声明为gunicorn来解决这个问题。

例如:

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

我终于想出了这一个。

它基本上只是一个PATH问题。 如果你根据你的设置以错误的顺序导入某些模块(如ossys ),你将导致Gunicornapp.wsgiapp模块中查找错误的包。 (不要与Flask中的app.wsgi_app函数混淆)

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

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

注意:这只是一个与Gunicorn的HEROKU问题。 它与他们的PYTHONPATH和模块搜索路径的设置方式有关。 我不知道原因究竟是什么,但这只是生产环境所必需的,无论模块导入顺序如何,本地设置都能正常工作。

我的猜测是python路径中还有一个“app”模块(gunicorn和flask都有一个名为app的模块)。 重命名除app.py以外的任何东西,它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM