36 votes

Base de données mysql distante sur une application Heroku

Puis-je utiliser la base de données mysql 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.

50voto

Sorenly Points 581

C'est vieux mais au cas où quelqu'un viendrait à chercher une réponse, c'est beaucoup plus facile que d'utiliser la gemme. Il suffit de fournir un DATABASE_URL et SHARED_DATABASE_URL (je ne suis pas sûr que le second soit nécessaire). Le format de l'url de la base de données est adapter://username:password@hostname:port/database Ainsi, par exemple, vous feriez :

heroku config:add DATABASE_URL=mysql://etok:somepassword@<your-server>:3306/etok
heroku config:add SHARED_DATABASE_URL=mysql://etok:somepassword@79.101.41.213:3306/etok

Puis redéployez votre application. Il lira votre DATABASE_URL et générer le database.yml à partir de celui-ci. Le port par défaut est déjà 3306 donc il n'est pas nécessaire dans l'url dans votre cas. Lorsque vous déployez, vous pouvez remarquer 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.

8voto

Nat Budin Points 206

J'ai écrit un petit bijou qui peut vous aider dans ce domaine. Vous pouvez le trouver à l'adresse suivante :

http://github.com/nbudin/heroku_external_db

4voto

Shan Valleru Points 621
heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

Ensuite, faites un

Heroku restart 

qui devrait faire l'affaire.

Note 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 le nom d'hôte directement, car, avec certains services d'hébergement mutualisé comme godaddy, le nom d'hôte de la base de données est le suivant utilisateur.345432.abcd.godaddy.com et il semble que heroku ne soit pas capable de le résoudre correctement (expérience personnelle), j'ai résolu le nom d'hôte en adresse IP et utiliser l'IP directement a fonctionné comme un charme ! De plus, si le mot de passe de votre base de données contient des caractères spéciaux, assurez-vous de les échapper correctement (comme '\!' pour '!' et ainsi de suite ).

1voto

John Beynon Points 23163

Jeter un coup d'œil à Complément Heroku Amazon RDS . Je ne vous dis pas de l'utiliser, mais il 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 - en gros, vous devez définir une variable de configuration pour votre instance mysql.

1voto

Mike Williamson Points 6836

Heroku ignore votre base de données.yml. Vous devrez explorer la solution Amazon RDS suggérée par John Beynon ou un autre addon similaire (s'il existe). IMO, vous devrez soit réévaluer votre besoin d'utiliser votre db MySQL, soit trouver un autre hébergement. Au cas où vous ne le sauriez pas déjà, la commande :

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 le développement n'est pas un problème.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X