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 d'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.

33
demandé sur WarFox 2011-03-22 22:55:35

6 réponses

c'est vieux mais au cas où quelqu'un tombe en cherchant une réponse, c'est beaucoup plus facile que d'utiliser la pierre précieuse. Il suffit de fournir un DATABASE_URL et SHARED_DATABASE_URL (je ne sais pas si la deuxième est nécessaire). Le format d'url de la base de données est adapter://username:password@hostname:port/database, ainsi, par exemple, vous voulez faire:

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 re-déployer votre application. Il va lire votre DATABASE_URL et de générer la base de données.yml. Le port par défaut est déjà 3306 il n'est donc pas nécessaire dans l'url dans votre cas. Lorsque vous déployez, vous pouvez remarquer qu'il génère de votre base de données.yml:

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

alors vous êtes prêt (aussi longtemps que votre serveur accepte les connexions de votre hôte heroku.

47
répondu eyko 2011-12-13 14:03:06

j'ai écrit un petit bijou qui pourrait vous aider. Vous pouvez le trouver à:

http://github.com/nbudin/heroku_external_db

8
répondu Nat Budin 2011-03-30 15:35:57
heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

alors, faites un

Heroku restart 

ça devrait aller.

user.345432.abcd.godaddy.com et il semble comme heroku est incapable de le résoudre correctement (expérience personnelle), j'ai résolu le nom d'hôte à l'adresse IP et en utilisant L'IP directement travaillé comme un le charme ! Aussi, si votre mot de passe de base de données a des caractères spéciaux, assurez-vous que vous les échappez correctement (comme'\!"pour"!"et ainsi de suite..)

4
répondu Shan Valleru 2013-01-01 10:52:52

Heroku ignore votre base de données.yml. Vous aurez besoin d'explorer la solution RDS Amazone John Beynon suggéré ou un autre addon similaire (s'il ya un). IMO, vous aurez soit à réévaluer votre besoin d'utiliser votre MySQL db ou trouver un autre hébergement. Juste au cas où vous ne la connaissez pas déjà, la commande:

heroku db:push

va dupliquer à 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 problème.

j'espère que ça aide.

1
répondu mikewilliamson 2011-03-23 14:42:09

regardez Heroku Amazon RDS addon. Je ne dis pas de l'utiliser, 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 - fondamentalement, vous devez définir une variable de configuration à votre instance mysql.

1
répondu John Beynon 2012-01-27 15:14:22

Ouais c'est très simple et simple:

1 - Créer mysql db 2-Créer un utilisateur mysql db (définir par défaut)) 3.1-allez à votre panneau Heroku / Config Vars

enter image description here

3.2-cliquez sur "Reveal Vars" et éditez (en cliquant sur l'icône du crayon) sur celui que vous voulez changer dans ce cas DATABASE_URL (si présente pas seulement un nouveau DATABASE_URL comme le nom)

enter image description here

3 (#2) - À l'aide de ligne de commande

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

puis

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 des exemples mentionnés précédemment en utilisant DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

Espérons que cette aide!!!

0
répondu d1jhoni1b 2018-04-08 01:01:42