Удаленная база данных mysql в приложении Heroku - PullRequest
36 голосов
/ 22 марта 2011

Могу ли я использовать базу данных mysql с моего личного веб-сервера вместо базы данных heroku?

Я настроил свою производственную базу данных так:

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

Но это не работает, мое приложение все еще использует общую базу данных heroku.

Ответы [ 6 ]

50 голосов
/ 13 декабря 2011

Это старый, но в случае, если кто-нибудь заскочит в поисках ответа, это гораздо проще, чем использовать драгоценный камень. Просто предоставьте DATABASE_URL и SHARED_DATABASE_URL (не уверен, нужен ли второй). Формат URL базы данных adapter://username:password@hostname:port/database, поэтому, например, вы должны сделать:

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

Затем переустановите приложение. Он прочитает ваш DATABASE_URL и сгенерирует database.yml из этого. Порт по умолчанию уже 3306, поэтому он не нужен в URL в вашем случае. При развертывании вы можете заметить, что он генерирует ваш database.yml:

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

Тогда все готово (пока ваш сервер принимает соединения с вашего хоста heroku.

8 голосов
/ 30 марта 2011

Я написал камень, который может помочь с этим.Вы можете найти его по адресу:

http://github.com/nbudin/heroku_external_db

4 голосов
/ 01 января 2013
heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

Затем сделайте

Heroku restart 

что должно сделать.

Важное замечание: Я предлагаю вам использовать IP-адрес хоста базы данных, а не указывать имя хоста напрямую, потому что с некоторыми службами общего хостинга, такими как godaddy, имя хоста db выглядит как user.345432.abcd.godaddy .com и кажется, что heroku не может решить его должным образом (личный опыт), я преобразовал имя хоста в IP-адрес, и использование IP-адреса работало, как чудо! Кроме того, если пароль вашей базы данных содержит специальные символы, убедитесь, что вы правильно их экранировали (например, «\!» Для «!» И т. Д.)

1 голос
/ 23 марта 2011

Heroku игнорирует ваш database.yml. Вам нужно будет изучить решение Amazon RDS, предложенное Джоном Бейноном, или какое-либо другое подобное дополнение (если оно есть). IMO, вам придется либо пересмотреть свою необходимость использовать базу данных MySQL, либо найти какой-то другой хостинг На случай, если вы еще этого не знали, введите команду:

heroku db:push

будет дублировать как схему, так и данные вашей базы данных разработки MySQL в базе данных heroku Postgres. Так что придерживаться MySQL для dev не проблема.

Надеюсь, это поможет.

1 голос
/ 23 марта 2011

взгляните на Heroku Amazon RDS addon .Я не говорю, используйте его, но он дает вам представление о том, что вам нужно делать и как Heroku управляет базами данных - в основном вам нужно установить переменную config для вашего экземпляра mysql.

0 голосов
/ 08 апреля 2018

Да, это очень просто и просто:

1 - создать базу данных mysql 2 - создать пользователя mysql db (установить значения по умолчанию) 3.1 - Перейти на панель Heroku / Config Vars

enter image description here

3.2 - Нажмите «Показать переменные» и отредактируйте (щелкнув по значку карандаша) тот, который вы хотите изменить в этом случае DATABASE_URL (если нет, то просто новый с DATABASE_URL в качестве имени)

enter image description here

3 (# 2) - Использование командной строки

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

тогда просто

heroku restart

И запомните синтаксис:

DATABASE_URL

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

Номер порта по умолчанию для СУБД MySQL: 3306

Вот почему вы видите примеры, упомянутые ранее, используя DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...