heroku上的python(烧瓶)部署问题

时间:2018-09-25 09:53:34

标签: python heroku flask deployment gunicorn

我有一个小烧瓶待办事项应用程序,试图在heroku中部署它,但是遇到错误并且无法解决它,源代码在这里,运行良好,

错误屏幕截图可以在此处查看=> http://prntscr.com/kyfwmy

这是我的app.py

from flask import Flask, render_template, request, jsonify, url_for, redirect
from flask_cors import CORS
from flask_pymongo import PyMongo, pymongo
import sys, time
from bson.json_util import dumps, ObjectId

app = Flask(__name__)
app.config['MONGO_DBNAME']='todo'
app.config['MONGO_URI']='mongodb://todo_task:todo_task*123*@ds111082.mlab.com:11082/todo'

mongo = PyMongo(app)

cors = CORS(app, resources={r'/ajax/*': {"origins": '*'}})



@app.route('/')
def index():
    _tasks = mongo.db.tasks.find().sort('created_at', pymongo.DESCENDING)
    return  render_template('index.html', tasks=_tasks)

@app.route('/add_task', methods=['POST'])
def add_task():
    if request.method == 'POST':
        tasks = mongo.db.tasks
        data = {
            'task': request.form['task'],
            'status': 'view', 
            'created_at': time.strftime('%d-%m-%Y %H:%M:%S'), 
            'updated_at': time.strftime('%d-%m-%Y %H:%M:%S')
            }
        tasks.insert(data)
        return redirect(url_for('index'))

@app.route('/destroy_task')
def task_destroy():
    if request.method == 'GET':
        id = request.args.get('id')
        tasks = mongo.db.tasks
        result = tasks.find_one({'_id': ObjectId(id)})
        tasks.remove(result)
        return redirect(url_for('index'))


@app.route('/ajax/task_update', methods=['POST'])
def task_update():
    id = request.form['id']
    tasks = mongo.db.tasks
    result = tasks.find_one({'_id': ObjectId(id)})

    if result['status'] == 'completed':
        result['status'] = 'view'
        res = {"status": 'view'}
    else:
        result['status'] = 'completed'
        res = {"status": 'completed'}

    result['updated_at'] = time.strftime('%d-%m-%Y %H:%M:%S')

    tasks.save(result)

    return jsonify({'status': res})

@app.route('/actives')
def actives():
    tasks = mongo.db.tasks
    _tasks = tasks.find({'status': 'view'}).sort('created_at', pymongo.DESCENDING)
    return  render_template('index.html', tasks=_tasks)

@app.route('/completes')
def completes():
    tasks = mongo.db.tasks
    _tasks = tasks.find({'status': 'completed'}).sort('created_at', pymongo.DESCENDING)
    return  render_template('index.html', tasks=_tasks)

@app.route('/clear_completes')
def clear_completes():
    tasks = mongo.db.tasks
    tasks.remove({'status': 'completed'})
    return redirect(url_for('index'))



app.run(debug=True)

https://github.com/IrfanMumtaz/python-todo-app

1 个答案:

答案 0 :(得分:0)

您没有告诉Flask使用哪个端口,因此它正在尝试使用端口5000(默认端口):

app.run(debug=True)

Heroku tells you what port to use via the PORT environment variable。您在运行应用程序时需要使用该变量的值。

类似的事情应该起作用:

import os

# ...

app.run(port=os.getenv('PORT', 5000))

您可能还想disable debug mode

  

注意:

     

即使交互式调试器在派生环境中不起作用(这使得在生产服务器上几乎无法使用),它仍然允许执行任意代码。这使其成为主要的安全风险,因此绝不能在生产机器上使用