2016-10-21 4 views
0

Ich habe eine Tornado-Anwendung auf Heroku ausgeführt, und alles ist bis zu diesem Punkt gut gegangen, wo ich versuche, ein Heroku Postgres-Addon hinzuzufügen. An dieser Stelle kann ich lokal verbinden Heroku's python guide beim Exportieren DATABASE_URL=postgres:///$(whoami) wie gezeigt here. Allerdings, wenn ich heroku local mit dem DATABASE_URL gegeben von heroku config:get DATABASE_URL laufen, erhalte ich die Folge Stack-Trace:Postgres-Verbindung Probleme mit Heroku in Tornado

[OKAY] Loaded ENV .env File as KEY=VALUE Format 
5:48:26 PM web.1 | Traceback (most recent call last): 
5:48:26 PM web.1 | File "src/myapp/app.py", line 61, in <module> 
5:48:26 PM web.1 |  main() 
5:48:26 PM web.1 | File "src/myapp/app.py", line 55, in main 
5:48:26 PM web.1 |  app = MyApplication() 
5:48:26 PM web.1 | File "src/myapp/app.py", line 35, in __init__ 
5:48:26 PM web.1 |  self.db = self.connect_to_db() 
5:48:26 PM web.1 | File "src/myapp/app.py", line 49, in connect_to_db 
5:48:26 PM web.1 |  port=url.port 
5:48:26 PM web.1 | File "/usr/lib/python3/dist-packages/psycopg2/__init__.py", line 164, in connect 
5:48:26 PM web.1 |  conn = _connect(dsn, connection_factory=connection_factory, async=async) 
5:48:26 PM web.1 | psycopg2.OperationalError: FATAL: database "heroku_username" does not exist 

Mein Code den Tornado-Anwendung für die Ausführung ist unten dargestellt:

from os import environ 

from psycopg2 import connect 

from tornado.ioloop import IOLoop 
from tornado.options import define 
from tornado.options import options 
from tornado.options import parse_command_line 
from tornado.web import Application 

from urllib.parse import urlparse 
from urllib.parse import uses_netloc 


define('debug', default=True, help='debug is on or not') 
define('port', default=8888, help='run on given port', type=int) 


class MyApplication(Application): 

    def __init__(self): 
     handlers = [ 
      (r'/health', HealthCheckHandler) 
     ] 
     settings = dict(debug=options.debug) 

     self.db = self.connect_to_db() 
     Application.__init__(self, handlers, **settings) 

    def connect_to_db(self): 
     """Connects to the database instance.""" 
     uses_netloc.append('postgres') 
     url = urlparse(environ['DATABASE_URL']) 
     print(url.username) 

     conn = connect(
      database=url.path[1:0], 
      user=url.username, 
      password=url.password, 
      host=url.hostname, 
      port=url.port 
     ) 


def main(): 
    parse_command_line() 
    app = MyApplication() 
    app.listen(options.port) 
    IOLoop.current().start() 


if __name__ == '__main__': 
    main() 

Antwort

0

Nun, es stellt sich heraus, Ich wollte heute ein Idiot sein. Wenn jemand an der Antwort in connect_to_db in der connection Funktion interessiert ist, stelle ich database=url.path[1:0] statt database=url.path[1:]. Effektiv hatte ich keine Datenbank angegeben.