Mam aplikację railsową, której bazy danych są w SQLite (wersja deweloperska i produkcyjna). Ponieważ przechodzę do heroku, chcę przekonwertować moją bazę danych do PostgreSQL.
W każdym razie słyszałem, że lokalna, programistyczna baza danych nie musi być zmieniana z SQLite, więc nie muszę tego zmieniać, jednak jak mam przejść do zmiany środowiska produkcyjnego z SQLite na PostgreSQL?
Czy ktoś kiedykolwiek to zrobił i może pomóc?
PS Nie jestem pewien, jak dokładnie nazywa się ten proces, ale słyszałem o migracji bazy danych z SQLite do PostgreSQL, czy to należy zrobić?
ruby-on-rails
database
sqlite
postgresql
heroku
Vasseurth
źródło
źródło
Odpowiedzi:
Możesz zmienić swój plik database.yml na ten zamiast używać gotowego pliku sqlite:
źródło
Poniższe kroki zadziałały dla mnie. Używa klejnotu taps , stworzonego przez Heroku i wspomnianego w Railscast # 342 Ryana Batesa. Jest kilka kroków, ale zadziałało idealnie (nawet daty zostały poprawnie zmigrowane) i było o wiele łatwiejsze niż Oracle -> DB2 lub SQL Server -> Oracle migracje, które robiłem w przeszłości.
Zauważ, że SQLite nie ma identyfikatora użytkownika ani hasła, ale klejnot taps czegoś wymaga. Po prostu użyłem literałów „użytkownik” i „hasło”.
Utwórz użytkownika bazy danych Postgres dla nowych baz danych
EDYCJA - zaktualizowane polecenie poniżej - użyj go zamiast tego
Utwórz wymagane bazy danych
Zaktualizuj plik Gemfile
Zaktualizuj database.yml
Uruchom serwer taps w bazie danych sqlite
Przeprowadź migrację danych
Zrestartuj serwer WWW Rails
Oczyść plik Gemfile
źródło
Ponieważ przechodzisz do heroku, możesz to zrobić za pomocą dotknięć:
Spowoduje to przeniesienie danych sqlite z lokalnego rozwoju do produkcji, a heroku automatycznie przekształci się w postgres.
Powinno to również działać, aby wypchnąć produkcyjną bazę danych sqlite do heroku, ale nie jest to testowane.
źródło
będziesz musiał również dodać wiersz " gem 'pg' " do twojego pliku gemfile, gdzie "pg" jest aktualnym gemem postgres dla Railsów.
źródło
Po prostu zaktualizuj plik config / database.yml:
Powyższe informacje są generowane podczas uruchamiania:
Dodaj to również do swojego Gemfile:
źródło
Teraz staje się to łatwe za pomocą jednego polecenia
źródło
Po wymianie klejnotu na
'sqlite3
klejnotpg
w pliku klejnotów, nadal otrzymywałem ikonę,sqlite3 error
gdy naciskałem na mistrza Heroku, ponieważ zapomniałem zatwierdzić zaktualizowanego pliku gem. Po prostu wykonanie następujących czynności rozwiązało problem:źródło
Po prostu zaktualizuj swój datatbase.yml
Używamy szyn i należy przestrzegać podstawowych standardów, takich jak DRY, Convention over Configuration itp., Więc w powyższym kodzie nie będziemy powtarzać tego samego kodu w kółko.
źródło
Wspomniałem o tym powyżej, ale nie mam wystarczającej reputacji jako czający się, aby móc to głosować. W nadziei na zwrócenie większej uwagi początkującym użytkownikom Rails, czytającym tę odpowiedź:
^^^ Jest to kluczowy element, oprócz pliku database.yml opisanego w wybranej odpowiedzi, dotyczący migracji aplikacji Rails do Postgres.
źródło
Oto jak mam swoją konfigurację. Jeśli używasz tylko MRI, a nie Jruby, możesz pominąć logikę w ustawieniach adaptera.
źródło
Możesz spróbować wykonać następujące czynności:
sqlite3 development.db .dump | psql dbname username
lub spróbuj z sqlitetopgscript: http://trac-hacks.org/browser/sqlitetopgscript/0.10/sqlite2pg
źródło
Możliwym rozwiązaniem (nie dla heroku) jest użycie yaml.db z:
http://www.railslodge.com/plugins/830-yaml-db
źródło
Dzisiaj miałem ten sam problem. Pracuję na Railsach 4.2.8. Rozwiązaniem było określenie wersji pg gem, w moim przypadku
0.18.4
.źródło