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
heroku上的python(flask)部署问题_Python_Heroku_Flask_Deployment_Gunicorn - Fatal编程技术网

heroku上的python(flask)部署问题

heroku上的python(flask)部署问题,python,heroku,flask,deployment,gunicorn,Python,Heroku,Flask,Deployment,Gunicorn,我有一个小的flask todo应用程序,并试图在heroku中部署它,但出现错误,我无法解决它,源代码在这里,这是完美的工作 错误截图可在此处查看=> 这是我的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,

我有一个小的flask todo应用程序,并试图在heroku中部署它,但出现错误,我无法解决它,源代码在这里,这是完美的工作

错误截图可在此处查看=>

这是我的
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)

您没有告诉Flask要使用哪个端口,所以它尝试使用端口5000(默认值):

希罗库。运行应用程序时,需要使用该变量的值

像这样的方法应该会奏效:

import os

# ...

app.run(port=os.getenv('PORT', 5000))
您可能还想:

注意: 即使交互式调试器不能在分叉环境中工作(这使得它几乎不可能在生产服务器上使用),它仍然允许执行任意代码。这使其成为一个重大的安全风险,因此绝不能在生产机器上使用它


欢迎来到Stack Overflow。它们不能被搜索或复制,可用性差。相反,将代码作为文本直接粘贴到问题中。如果选择它并单击
{}
按钮或Ctrl+K,代码块将缩进四个空格,这将使其呈现为代码。此外,请将相关代码包含在此处作为代码。我们不应该离开现场去理解你的问题。
import os

# ...

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