0

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.

bsteven48
  • 59
  • 7

2 Answers2

1

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

Miguel Grinberg
  • 65,299
  • 14
  • 133
  • 152
1

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.

Stephen Rauch
  • 47,830
  • 31
  • 106
  • 135
Michel Neves
  • 252
  • 2
  • 6