在Heroku上部署之前,Flask / Python应用程序无法启动

时间:2013-12-25 11:09:35

标签: python python-2.7 heroku flask

我想在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)时,它运行正常。

4 个答案:

答案 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可调用的,应该在指定的模块中找到。

https://github.com/benoitc/gunicorn#gunicorn

答案 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文件夹作为包