Ziele dieses Tutorials

  • PostgreSQL-DBMS Installation auf dem Entwicklungssystem (Ubuntu 14.04)
  • Anlegen einer Entwicklungs- und Testdatenbank
  • Konfiguration eines DB-Schema-Users mit Passwort
  • Erzeugen der Datenbankschemas
  • Import der Echtdaten aus der Heroku-Datenbank

Update vom 11.08.2015

  • Heroku-Toolbelt Befehle haben sich geändert

PostgreSQL Installation

Die Installation gestaltet sich einfach, da alle Packages bereits im Hauptrepository liegen
(http://de.archive.ubuntu.com/ubuntu/ trusty main)

apt-get install postgresql libpq-dev

Als nächstes müssen wir einen Datenbankbenutzer anlegen. Hierfür wechseln wir über den neu angelegten postgres Systembenutzer in die PostgreSQL-Konsole:

su postgres -c psql

Es öffnet sich die PostgreSQL-Konsole ("postgres=#" als Indikator). Dort erzeugen wir einen DB-Superuser mit Passwort.

CREATE ROLE <neuer_user> SUPERUSER LOGIN PASSWORD '<neues_passwort>';

Die PostgreSQL-Konsole kann mit folgendem Befehl verlassen werden.

\q

Rails Konfiguration

Die Gemfile muss angepasst werden. Dafür muss das alte Datenbankgem (in meinem Fall sqlite3) entfernt oder auskommentiert werden. Das neue gem "pg" muss sowohl in der development als auch test Bundler-Gruppe vorhanden sein.

group :development, :test do
  #gem 'sqlite3'
  gem 'pg'
end

Benutzen alle Bundler-Gruppen eine PostgreSQL-Datenbank in gleicher Version, kann das pg-gem auch global, außerhalb der Bundler-Gruppen verwendet werden.

Als nächstes muss die database.yml im config-Ordner angepasst werden:

development:
  adapter: postgresql
  encoding: unicode
  database: rails-app-dev
  pool: 5
  timeout: 5000
  username: <neuer_user>
  password: <neues_passwort>

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.

test:
  adapter: postgresql
  encoding: unicode
  database: rails-app-test
  pool: 5
  timeout: 5000
  username: <neuer_user>
  password: <neues_passwort>

# Wird von heroku überschrieben
production:
  adapter: postgresql
  encoding: unicode
  database: rails-app-prod
  pool: 5
  timeout: 5000
  username: <neuer_user>
  password: <neues_passwort>

Das neue gem pg muss gebündelt werden:

bundle install

Die Datenbankschemas werden über folgende Befehle angelegt:

rake db:create:all
rake db:migrate

Echtdatenimport aus der Heroku-Produktionsumgebung

Am besten Testen und Entwickeln lässt es sich mit den Echtdaten aus dem Live-System. Sind sowohl die Entwicklungsdatenbank, als auch die Produktionsdatenbank auf Heroku, PostgreSQL-Datenbanken, ist es relativ einfach einen Datenexport/-import durchzuführen.

Zuerst müssen wir ein Heroku-Plugin installieren. Vorraussetzung ist ein installierter Heroku-Toolbelt. Mit folgendem Befehl wird das pgbackups-Plugin installiert.

heroku addons:add pgbackups

In der neuesten Version des Heroku-Toolbelts ist das pgbackup-Addon bereits vorhanden.

Mit diesem Plugin ist es möglich einen Snapshot/Backup der Datenbank anzulegen:

heroku pgbackups:capture
heroku pg:backups capture --app <app-name>

Folgender Befehl bekommt vom pgbackups-Plugin eine URL zum gerade erzeugtem Datenbankbackup und speichert dieses lokal in die Datei "heroku_db.dump". Vorraussetzung ist ein installiertes cURL.

curl -o heroku_db.dump `heroku pgbackups:url`
curl -o heroku_db.dump `heroku pg:backups public-url --app <app-name>`

Zum Schluss noch wird das Heroku-DB-Backup in die lokale PostgeSQL-Datenbank importiert. Hierfür können wir die Wiederherstellungsfunktion von PostgreSQL verwenden:

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U <neuer_user> -d rails-app-dev heroku_db.dump

"rails-app-dev" ist der Name eurer Datenbank welche in der database.yml angegeben wurde.
Es erscheint eine Passworteingabe in der ihr das <neue_passwort> eintragt.

Wiederholt den Schritt für eure Testdatenbank wenn ihr wollt.

Viel Erfolg!

 

Getestet unter Ruby on Rails 4.1.0 mit pg gem 14.1 und installiertem postgresql 9.3.