title: error: [Errno 98] Address already in use
body: <p>I'm creating a simple flaskapp which I'm going to deploy on heroku, first time deploying a python app on heroku, with that said i'm new to gunicorn. </p>
  
  <p>Addtitional notes: Using a virtual environment. </p>
  
  <p>Version of flask Flask==0.10.1</p>
  
  <p>gunicorn==19.3.0</p>
  
  <p>Using 'python run.py' <strong>works</strong></p>
  
  <p>Using 'foreman start' I get the following error</p>
  
  <pre><code>16:35:44 web.1  | started with pid 4047
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Starting gunicorn 19.3.0
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Listening at: http://0.0.0.0:5000 (4047)
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Using worker: sync
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [INFO] Booting worker with pid: 4053
  16:35:44 web.1  |  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [ERROR] Exception in worker process:
  16:35:44 web.1  | Traceback (most recent call last):
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
  16:35:44 web.1  |     worker.init_process()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
  16:35:44 web.1  |     self.wsgi = self.app.wsgi()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
  16:35:44 web.1  |     self.callable = self.load()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
  16:35:44 web.1  |     return self.load_wsgiapp()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
  16:35:44 web.1  |     return util.import_app(self.app_uri)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
  16:35:44 web.1  |     __import__(module)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in &lt;module&gt;
  16:35:44 web.1  |     flaskapp.run(debug=True)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
  16:35:44 web.1  |     run_simple(host, port, self, **options)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple
  16:35:44 web.1  |     test_socket.bind((hostname, port))
  16:35:44 web.1  |   File "/usr/lib/python2.7/socket.py", line 224, in meth
  16:35:44 web.1  |     return getattr(self._sock,name)(*args)
  16:35:44 web.1  | error: [Errno 98] Address already in use
  16:35:44 web.1  | Traceback (most recent call last):
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
  16:35:44 web.1  |     worker.init_process()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
  16:35:44 web.1  |     self.wsgi = self.app.wsgi()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
  16:35:44 web.1  |     self.callable = self.load()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
  16:35:44 web.1  |     return self.load_wsgiapp()
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
  16:35:44 web.1  |     return util.import_app(self.app_uri)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
  16:35:44 web.1  |     __import__(module)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in &lt;module&gt;
  16:35:44 web.1  |     flaskapp.run(debug=True)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
  16:35:44 web.1  |     run_simple(host, port, self, **options)
  16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple
  16:35:44 web.1  |     test_socket.bind((hostname, port))
  16:35:44 web.1  |   File "/usr/lib/python2.7/socket.py", line 224, in meth
  16:35:44 web.1  |     return getattr(self._sock,name)(*args)
  16:35:44 web.1  | error: [Errno 98] Address already in use
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [INFO] Worker exiting (pid: 4053)
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Shutting down: Master
  16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Reason: Worker failed to boot.
  16:35:44 web.1  | exited with code 3
  16:35:44 system | sending SIGTERM to all processes
  </code></pre>
  
  <p>Procfile </p>
  
  <pre><code>web: gunicorn run:flaskapp --log-file=-
  </code></pre>
  
  <p>File Structure</p>
  
  <pre><code>/
   ...
   run.py
   Procfile
   app/
      __init__.py
      routes.py
      ...
  </code></pre>
  
  <p>run.py</p>
  
  <pre><code>from app import flaskapp
  flaskapp.run(debug=True)
  </code></pre>
  
  <p>__init__.py</p>
  
  <pre><code>from flask import Flask
  
  flaskapp = Flask(__name__)
  from app import routes
  </code></pre>
  
  <p>routes.py</p>
  
  <pre><code>from app import flaskapp
  from flask import render_template
  import dbwrapper
  
  @flaskapp.route('/')
  @flaskapp.route('/home')
  def index():
      return render_template('home.html')
  </code></pre>
  
  <p>From what I read gunicorn allows for the creation of multiple threads, which leads me to think that the threads are trying to access the same port which throws the <strong>already in use error</strong>. However I have no idea how to resolve it, any help is appreciated. </p>