web-dev-qa-db-fra.com

Base de données mysql distante sur l'application Heroku

Puis-je utiliser la base de données mysql à partir de mon serveur Web personnel au lieu de la base de données de heroku?

J'ai configuré ma base de données de production comme ceci:

production:
    adapter: mysql2
    database: somedatabase
    username: someusername
    password: somepassword
    Host: 1.1.1.1:1234

Mais cela ne fonctionne pas, mon application utilise toujours la base de données partagée de heroku.

34
dormitkon

C'est vieux, mais si quelqu'un cherche une réponse, c'est beaucoup plus facile que d'utiliser la gemme. Fournissez simplement un DATABASE_URL et un SHARED_DATABASE_URL (ne savez pas si la seconde est nécessaire). Le format de l'URL de la base de données est adapter://username:password@hostname:port/database. Par exemple, vous feriez: 

heroku config:add DATABASE_URL=mysql://etok:somepassword@<your-server>:3306/etok
heroku config:add SHARED_DATABASE_URL=mysql://etok:[email protected]:3306/etok

Ensuite, redéployez votre application. Il va lire votre DATABASE_URL et générer le database.yml à partir de cela. Le port par défaut est déjà 3306, il n'est donc pas nécessaire de l'URL dans votre cas. Lorsque vous déployez, vous remarquerez peut-être qu'il génère votre database.yml: 

-----> Writing config/database.yml to read from DATABASE_URL

Ensuite, vous êtes prêt (tant que votre serveur accepte les connexions de votre hôte heroku).

48
eyko

J'ai écrit un petit bijou qui peut aider avec ça. Vous pouvez le trouver à:

http://github.com/nbudin/heroku_external_db

8
Nat Budin
heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

Ensuite, fais un 

Heroku restart 

cela devrait faire. 

Remarque importante: je vous suggère d'utiliser l'adresse IP de l'hôte de la base de données plutôt que de donner directement le nom d'hôte, coz. Avec certains services d'hébergement partagé comme Godaddy, le nom d'hôte de la base de données ressemble à user.345432.abcd.godaddy.com et il semble que heroku soit incapable de le résoudre correctement (expérience personnelle), j’ai résolu le nom d’hôte en adresse IP et l’utilisation directe de l’IP a fonctionné à merveille! De plus, si votre mot de passe de base de données contient des caractères spéciaux, assurez-vous de les échapper correctement (comme '\!' Pour '!' Et ainsi de suite ..)

4
Shan Valleru

jetez un oeil sur Heroku Amazon RDS addon . Je ne dis pas que vous l'utilisez, mais cela vous donne un aperçu de ce que vous devez faire et de la façon dont Heroku gère les bases de données - vous devez essentiellement définir une variable de configuration pour votre instance mysql.

1
John Beynon

Heroku ignore votre database.yml. Vous devrez explorer la solution Amazon RDS proposée par John Beynon ou un autre module similaire (le cas échéant). Messagerie Internet uniquement, vous devrez soit réévaluer votre besoin d’utiliser votre base de données MySQL, soit trouver un autre hébergement.

heroku db:Push

dupliquera à la fois le schéma ET les données de votre base de données de développement MySQL dans la base de données Postgres de heroku. Donc, rester avec MySQL pour dev n'est pas un problème.

J'espère que ça aide.

1
mikewilliamson

Ouais c'est très simple et direct:

1 - Créer une base de données mysql 2 - Créer un utilisateur de base mysql (définir les valeurs par défaut) 3.1 - Accédez à votre panneau Heroku/Config Vars

 enter image description here

3.2 - Cliquez sur "Révéler Vars" et éditez (en cliquant sur l'icône en forme de crayon) celle que vous souhaitez modifier dans ce cas DATABASE_URL (si vous n'en présentez qu'une nouvelle avec DATABASE_URL comme nom)

 enter image description here

3 (# 2) - Utilisation de la ligne de commande

heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:databaseserverport/databasename

alors juste 

heroku restart

Et rappelez-vous la syntaxe:

DATABASE_URL 

mysql://user:password@hostnameOrIPAddress:PortNumber/databasename

Le numéro de port par défaut du SGBD MySQL est: 3306

C'est pourquoi vous voyez les exemples mentionnés précédemment en utilisant DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

J'espère que cela t'aides!!!

0
d1jhoni1b