Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python heroku上的gunicorn导入错误_Python_Heroku_Flask_Wsgi_Gunicorn - Fatal编程技术网

Python heroku上的gunicorn导入错误

Python 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

我无法在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)
通过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以外的任何名称,它都应该可以工作。

我终于找到了这个名称

这基本上只是一个路径问题。如果根据您的设置以错误的顺序导入某些模块(如ossys),则会导致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"