我想在Heroku上部署一个Flask(python)应用程序,我之前做过没有任何问题。 但现在,我不知道是什么问题。
问题出在这里,当我输入以下命令来测试本地服务器时:
foreman start
我有这个错误:
foreman start
12:01:53 web.1 | started with pid 6055
12:01:53 web.1 | 2013-12-25 12:01:53 [6058] [INFO] Starting gunicorn 18.0
12:01:53 web.1 | 2013-12-25 12:01:53 [6058] [INFO] Listening at: http://0.0.0.0:5000 (6058)
12:01:53 web.1 | 2013-12-25 12:01:53 [6058] [INFO] Using worker: sync
12:01:53 web.1 | 2013-12-25 12:01:53 [6063] [INFO] Booting worker with pid: 6063
12:01:53 web.1 | 2013-12-25 12:01:53 [6063] [ERROR] Exception in worker process:
12:01:53 web.1 | Traceback (most recent call last):
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
12:01:53 web.1 | worker.init_process()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
12:01:53 web.1 | self.wsgi = self.app.wsgi()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
12:01:53 web.1 | self.callable = self.load()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
12:01:53 web.1 | return self.load_wsgiapp()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
12:01:53 web.1 | return util.import_app(self.app_uri)
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
12:01:53 web.1 | __import__(module)
12:01:53 web.1 | ImportError: Import by filename is not supported.
12:01:53 web.1 | Traceback (most recent call last):
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
12:01:53 web.1 | worker.init_process()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
12:01:53 web.1 | self.wsgi = self.app.wsgi()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
12:01:53 web.1 | self.callable = self.load()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
12:01:53 web.1 | return self.load_wsgiapp()
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
12:01:53 web.1 | return util.import_app(self.app_uri)
12:01:53 web.1 | File "/home/myhome/myApp/venv/local/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
12:01:53 web.1 | __import__(module)
12:01:53 web.1 | ImportError: Import by filename is not supported.
12:01:53 web.1 | 2013-12-25 12:01:53 [6063] [INFO] Worker exiting (pid: 6063)
12:01:53 web.1 | 2013-12-25 12:01:53 [6058] [INFO] Shutting down: Master
12:01:53 web.1 | 2013-12-25 12:01:53 [6058] [INFO] Reason: Worker failed to boot.
12:01:53 web.1 | exited with code 3
12:01:53 system | sending SIGTERM to all processes
SIGTERM received
我的Procfile是:
web: gunicorn app/route:app
我正在使用这个主要内容:
if __name__ == '__main__':
import logging
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('foo.log', maxBytes=10000, backupCount=1)
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)
if TODAY != cache.config['CACHE_ARGS'] :
with app.app_context():
cache.clear()
port = int(os.environ.get('PORT', 33507))
app.run(debug = True, host='0.0.0.0', port=port)
当我在浏览器上运行应用程序(0.0.0.0:33507)时,它运行正常。
答案 0 :(得分:2)
不应该这样:
web: gunicorn app/route:app
是:
web: gunicorn app.route:app
Gunicorn github页面说:
基本用法:
$ gunicorn [OPTIONS] APP_MODULE
APP_MODULE的格式为$(MODULE_NAME):$(VARIABLE_NAME)。 模块名称可以是完整的虚线路径。变量名称是指 一个WSGI可调用的,应该在指定的模块中找到。
答案 1 :(得分:1)
我在这里找到了一些有用的东西:http://ryaneshea.com/lightweight-python-apps-with-flask-twitter-bootstrap-and-heroku
Procfile
应如下所示:
web: python app/route.py
答案 2 :(得分:0)
您的Procfile位于何处?它应该在主目录中。你可以发布目录结构吗?或者你在Github上有这个项目吗?
答案 3 :(得分:0)
你的Procfile应该是
web: gunicorn app.route:app
并确保包含app
的文件夹route.py
是一个包,这意味着app文件夹应包含__init__.py
以将app文件夹作为包