2011-03-22 13 views
32

Czy mogę korzystać z bazy danych mysql z mojego osobistego serwera internetowego zamiast z bazy danych Heroku?Zdalna baza danych mysql na aplikacji Heroku

skonfigurowałem mój bazę produkcyjną tak:

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

Ale to nie działa, moja aplikacja nadal korzysta Heroku jest wspólna baza danych.

Odpowiedz

47

To jest stary, ale w przypadku gdy ktoś spada w poszukiwaniu odpowiedzi, jest znacznie łatwiejsze niż przy użyciu gem. Wystarczy podać DATABASE_URL i SHARED_DATABASE_URL (nie jestem pewien, czy potrzebny jest drugi). Format adresu URL bazy danych jest adapter://username:[email protected]:port/database, więc na przykład, by zrobić:

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

Następnie ponownie wdrożyć aplikację. Przeczytasz swoją DATABASE_URL i wygenerujesz bazę danych.yml z tego. Domyślny port to już 3306, więc nie jest potrzebny w adresie URL w twoim przypadku. Podczas wdrażania, można zauważyć, że generuje swój database.yml.

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

to jesteś ustawiony (o ile serwer akceptuje połączeń z hosta Heroku

+9

Wygląda na to, że "DATABASE_URL" wystarczy, działa bez określania "SHARED_DATABASE_URL". Również chciałbym zauważyć, że adapter 'mysql2' jest teraz bardziej powszechny niż' mysql'. Więc będzie wyglądać jak 'mysql2: // ...'. Oczywiście musisz dodać 'gem 'mysql2'' do' Gemfile'. –

+0

Czy X.509 może być używany w ten sposób? –

+2

"Na wypadek, gdyby" ktoś "padł i szukał odpowiedzi". Właśnie uratowałeś mój dzień. Dziękuję Ci! Jest to o wiele prostsze, niż mogłem przypuszczać. – RileyE

1

zobacz Heroku Amazon RDS addon. Nie mówię, że go używam, ale daje ci wgląd w to, co musisz zrobić i jak Heroko zarządza bazami danych - w zasadzie musisz ustawić zmienną konfiguracyjną na instancję mysql.

1

Heroku ignoruje plik database.yml. Będziesz musiał zapoznać się z rozwiązaniem Amazon RDS zaproponowanym przez Johna Beynona lub innym podobnym dodatkiem (jeśli taki istnieje). IMO, albo będziesz musiał ponownie ocenić swoją potrzebę korzystania z bazy danych MySQL lub znaleźć inny hosting. Tylko w przypadku, gdy nie już wiedzą, komenda:

heroku db:push 

będzie powielać zarówno schematu i danych z bazy danych MySQL w rozwoju bazy PostgreSQL Heroku użytkownika. Więc trzymanie się MySQL dla dev nie stanowi problemu.

Mam nadzieję, że to pomaga.

+0

Zorientowałem się, że zignorowałem moją bazę danych.yml i próbowałem skonfigurować DATABASE_URL przy pomocy: config: add DATABASE_URL = mysql2: // user: password @ host/dbname, ale nie działają, aplikacja szuka db na serwerze Amazon. To jest z log: /app/.bundle/gems/ruby/1.8/gems/mysql2-0.2.6/lib/mysql2/client.rb:37:in 'connect ': Odmowa dostępu dla użytkownika' etok '@' ec2 -174-129-89-188.compute-1.amazonaws.com '(używając hasła: TAK) (Mysql2 :: Error) – dormitkon

8

Napisałem klejnot, który może w tym pomóc. Można go znaleźć pod adresem:

http://github.com/nbudin/heroku_external_db

+0

Dzięki Nat. Użyłem twojego klejnotu przez miesiąc i działa dobrze! – Dorian

+1

Używamy tego również przez około rok. Dodałem dokumentację do tego projektu, więc łatwiej jest zacząć. Oto link do zapisu na moim blogu: http://www.benjaminoakes.com/2011/11/21/using-heroku-with-an-external-mysql-database/ –

3
heroku config:add DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 

Następnie zrobić do

Heroku restart 

że należy zrobić

Ważna uwaga:. proponuję użyć adresu IP hosta bazy danych niż używanie bezpośredniego podawania nazwy hosta, coz, z niektórymi współdzielonymi usługami hostingowymi, takimi jak godaddy, nazwa hosta db wygląda na: user.345432.abcd.godaddy.com i wygląda na to, że heroku nie jest w stanie rozwiązać go poprawnie (osobiste doświadczenie) , Rozwiązałem nazwę hosta na adres IP i używanie adresu IP działało jak czar! Ponadto, jeśli twoje hasło do bazy danych zawiera znaki specjalne, upewnij się, że uciekłeś poprawnie (np. "\!" Dla "!" Itd.)