Propriétés De Connexion À La Base De Données Heroku
j'essaie d'effectuer une tâche relativement insignifiante: je veux me connecter à une base de données Heroku. J'ai créé la base de données et j'ai reçu des accréditations du site D'Heroku. Cependant, lorsque j'essaie de me connecter à cette base de données en utilisant outre le terminal 'heroku' client en ligne de commande, j'obtiens des erreurs fatales ou Je ne peux pas connecter des erreurs.
<!-Les deux outils que J'ai essayé de connecter à l'extérieur de L'application terminal Heroku sont: Navicat et IntelliJ.l'erreur que je reçois dans Navicat en essayant de me connecter à la base de données est:
could not connect to server: Host is down
Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
TCP/IP connections on port 5432?
Mes paramètres de connexion sont comme suit:
Nom De La Connexion Heroku Dev Test
nom de L'hôte / adresse IP ec2-107-21-112-215.compute-1.amazonaws.com
Port 5432
Navicat ne semble même pas faire une tentative de se connecter à cela hôte.
quand j'essaie de me connecter avec IntelliJ, en utilisant les informations d'identification complètes, j'obtiens l'erreur suivante:
java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off
encore une fois, j'utilise les justificatifs d'identité que L'application Heroku me fournit lors de l'accès à ma base de données sur leur site web.
<!-Quelqu'un a-t-il déjà rencontré ce problème de connexion Heroku?7 réponses
Heroku fournit cette information pour se connecter à partir de sources externes:
https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress
le second message d'erreur indique que PostgreSQL n'est pas configuré pour accepter la connexion que vous essayez de faire. Étant donné les informations fournies par Heroku, une bonne supposition est que vous n'êtes pas connecté avec SSL. Essayez d'activer sur votre connexion.
Voici les instructions pour L'utilisation de SSL avec Navicat: http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html.
ceci peut être utile pour configurer Intellij pour utiliser SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely.
j'ai aussi eu le problème avec le FATAL: no pg_hba.conf entry for host
message d'erreur.
j'ai résolu le problème de connexion à ma base de données Heroku Postgres en ajoutant ce qui suit à ma chaîne JDBC: &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
.
Exemple
jdbc:postgresql://host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
vous aurez besoin de L'option SSL seulement si SSL est activé pour votre base de données Postgres (qui est la valeur par défaut).
Indice
si vous voulez vérifier vos propriétés de connexion à la base de données, alors lancez la commande suivante avec le Heroku Toolbelt:heroku pg:info --app your-heroko-appname
(assurez-vous que vous avez Postgres insalled pour exécuter cette commande dans votre terminal)
pg:info
commande seront également vous dire que sslmode
est réglé sur require
.
pour tester la connexion à la base de données je recommande SQL Power Architect comme c'est l'outil que j'utilisais pour vérifier ma solution.
IntelliJ - > sources de données et pilotes
après avoir configuré l'hôte, La base de données et les détails de l'utilisateur sous le General
onglet passer à l' Advanced
onglet et vous assurer que vous avez ajouté le code suivant:
- ssl = true
- sslfactory = org.PostgreSQL.SSL.NonValidatingFactory
voulait aider les autres qui pourraient se trouver dans cette situation. Si vous fournissez le nom D'Utilisateur et le mot de passe dans des champs séparés plutôt que sur la ligne de commande, vous devez utiliser un ? entre le nom de la base de données et ssl = true et jeter le premier &
jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
C'est la ligne de commande qui m'a finalement permis de me connecter à une base de données PostgreSQL en utilisant SQL Power Architect
pour ceux qui pourraient utiliser la botte de ressort et avoir la configuration fournie par le DATABASE_URL propriété de l'environnement (Pas propriété du système), le suffixe peut être ajouté à la propriété:
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
et passé avec une légère modification à la fève config:
@Bean
public BasicDataSource dataSource() throws URISyntaxException {
URI dbUri = new URI(System.getenv("DATABASE_URL"));
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
StringBuilder dbUrl = new StringBuilder(128);
dbUrl.append("jdbc:postgresql://")
.append(dbUri.getHost()).append(":")
.append(dbUri.getPort())
.append(dbUri.getPath());
String query = dbUri.getQuery();
if (null != query && !query.isEmpty()) {
dbUrl.append("?").append(query);
}
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(dbUrl.toString());
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
return basicDataSource;
}
vous pouvez définir une variable de configuration D'environnement 'PGSSLMODE 'à' require ' via L'interface web D'Heroku ou CLI.
Case: Postgres dB configuré comme un Add-on Heroku et attaché à l'application sur un Dyno Heroku.
Heroku est instructions malheureusement omettre toute mention sur la façon d'activer SSL, même si elle est nécessaire pour tout niveau dB à partir de Standard-0 par défaut.
suivre toutes les étapes pg-copy ou pg-upgrade (de préférence) l'approche dépend de votre version de Postgres) dans les instructions de Heroku; cependant, avant de déclasser l'ancienne base de données (le cas échéant) -- ajouter la variable D'environnement PGSSLMODE.
les instructions couvrent suffisamment la façon de promouvoir la nouvelle base de données (et, par conséquent, de définir la DATABASE_URL), donc pas de changements/modifications devrait être obligatoire.
Ajouter ou modifier la ligne suivante dans votre postgresql.fichier conf :
listen_addresses = '*'
ajouter la ligne suivante comme première ligne de pg_hba.conf. Il permet l'accès à toutes les bases de données pour tous les utilisateurs avec un mot de passe crypté:
TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
Redémarrer postgresql service:
net stop postgresql-9.0 & net start postgresql-9.0
(la version doit être basée sur votre installation) -- sur windows (exécuter cmd en tant qu'administrateur).
sudo service start postgresql -- On linux (or according to your linux distribution.)