Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
383 views
in Technique[技术] by (71.8m points)

python - Deploying Flask app to Heroku

I'm trying to develop my first "large" app with Flask on Heroku and I'm attempting to combine the basic tutorial here: https://devcenter.heroku.com/articles/python with the instructions here: http://flask.pocoo.org/docs/patterns/packages/#larger-applications. It works locally with "foreman start" but when I push to Heroku I get an error that the wrong port is in use:

Starting process with command python run.py 2012-12-04T23:45:18+00:00 app[web.1]: * Running on http://127.0.0.1:5000/ 2012-12-04T23:45:18+00:00 app[web.1]: * Restarting with reloader 2012-12-04T23:45:23+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 5000, should be 33507 (see environment variable PORT)

I'm new to all this, but it looks like it's trying to run "locally" on Heroku. I've tried all sorts of combinations, but can't get it to work. My very simple code right now is (the app is called "pml"):

directory: /pml

Procfile:

web: python run.py

run.py:

from pml import app
app.run(debug=True)

directory: /pml/pml/

__init__.py

from flask import Flask
app = Flask(__name__)

import pml.views

view.py

from pml import app

@app.route('/')
def index():
    return 'Hello World!'
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I haven't used Heroku, but to me, it looks like they have a reserved port for Flask, specifically 33507. It looks like it will try to use an environment variable, which I am not sure how to set in Heroku. The good news is you can tell Flask which port to use.

try this:

app.run(debug=True, port=33507)

and it looks like adding the PORT to the env in heroku is done like this:

heroku config:add PORT=33507

You should only have to do one of these. I would try the first as it, to me, is the straight forward way to fix the issue.

EDIT
After reading the article from your post, I see where the issue comes in.

port = int(os.environ.get('PORT', 5000))

That line says, get the value of PORT from the environment if it is set, otherwise use 5000. I am not sure why they wouldn't allow it to run from 5000 if that's what is in their docs, but I would try this change:

port = int(os.environ.get('PORT', 33507))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...