2017-07-16 1 views
0

J'essaye d'obtenir une application heroku déployée et malheureusement je reçois l'erreur suivante. Essentiellement, ce que les journaux Heroku vous disent de faire pour obtenir une connexion de base de données Heroku est la suivante (prise d'ici; https://devcenter.heroku.com/articles/heroku-postgresql)Heroku ne peut pas lancer Python Flask App ("AttributeError: l'objet 'function' n'a pas d'attribut 'uses_netloc'")

import os 
import psycopg2 
import urlparse 

urlparse.uses_netloc.append("postgres") 
url = urlparse.urlparse(os.environ["DATABASE_URL"]) 

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

je commencé à utiliser gunicorn, mais je ne pouvais pas comprendre les erreurs que je recevais parce que il engendrait comme 10 travailleurs, donc je suis passé à serveuse et je suis l'erreur suivante (à partir heroku logs):

2017-07-16T22:21:52.941072+00:00 app[web.1]: Exception in thread Thread-1: 
2017-07-16T22:21:52.941072+00:00 app[web.1]: Traceback (most recent call last): 
2017-07-16T22:21:52.941073+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 801, in __bootstrap_inner 
2017-07-16T22:21:52.941073+00:00 app[web.1]:  self.run() 
2017-07-16T22:21:52.941073+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 754, in run 
2017-07-16T22:21:52.941074+00:00 app[web.1]:  self.__target(*self.__args, **self.__kwargs) 
2017-07-16T22:21:52.941074+00:00 app[web.1]: File "/app/timed/inflation.py", line 28, in inflatemethod 
2017-07-16T22:21:52.941075+00:00 app[web.1]:  urlparse.uses_netloc.append("postgres") 
2017-07-16T22:21:52.941075+00:00 app[web.1]: AttributeError: 'function' object has no attribute 'uses_netloc' 

donc, par défaut la méthode Heroku qui est dans la documentation est cassé! C'est mauvais! Je ne sais pas comment résoudre ce problème, est-ce que quelqu'un d'autre a des idées?

+0

que je reçois la même erreur sur Python 3 avec gunicorn. Hmm ... –

Répondre

1

Vous n'avez pas affiché votre code actuel de inflation.py. Dans ce code, vous faites presque certainement from urlparse import urlparse, au lieu d'importer le module comme dans l'exemple de code.

+0

Comment pourrais-je traduire cela en Python 3? 'de urllib.parse importer urlparse', non? –

0

Pour python 3 la bibliothèque urlparse est maintenant urllib.parse

Ainsi, l'échantillon de Heroku est bon pour les applications python 2 mais pour python3 applications les modifications suivantes devraient fonctionner:

importation urllib.parse

urllib.parse.uses_netloc.append ("postgres") url = urllib.parse.urlparse (os.environ [ "DATABASE_URL"])