bsteven48
bsteven48

Reputation: 59

Unable to push flask-socketio app to heroku

I have been attempting to push my flask app running socketio to Heroku, but to no avail. I have narrowed it down to the Procfile. I am constantly getting 503 server errors because my program doesn't want to be connected to. I tested it locally and it works just fine.

I have had a couple versions of the Procfile, which are

web: gunicorn -b 0.0.0.0:$PORT app:userchat_manager

and

web: python userchat_manager.py

where the userchar_manager file holds the SocketIO.run() function to run the app. What would be the best way to fix this?

EDIT: I changed the Procfile to

web: gunicorn -b 0.0.0.0:$PORT app:app

and it loads. However, whenever I try to send a message, it doesn't send the message and I get a 400 code.

Upvotes: 0

Views: 1186

Answers (2)

Michel Neves
Michel Neves

Reputation: 272

Try this:

web: gunicorn --worker-class eventlet -w 1 your_module:app

You don't need port to connect the socket, just use your heroku app url as socket connection withou :PORT.

Upvotes: 1

Miguel Grinberg
Miguel Grinberg

Reputation: 67479

See the Deployment section of the documentation. The gunicorn web server is only supported when used alongside eventlet or gevent, and in both cases you have to use a single worker process.

If you want to drop gunicorn and run the native web server instead, you should code your userchat_manager.py script in a way that loads the port on which the server should listen from the PORT environment variable exposed by Heroku. If you go this route, I still think you should look into using eventlet or gevent, without using an asynchronous framework the performance is pretty bad (no WebSocket support), and the number of clients that can be connected at the same time is very limited (just one client per worker).

Upvotes: 1

Related Questions