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!'

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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))


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x