So verwenden Sie PostgreSQL mit Ihrer Ruby-on-Rails-Anwendung unter Ubuntu 20.04

Einführung

Bei Verwendung des Web-Frameworks Ruby on Rails verwendet Ihre Anwendung standardmäßig SQLite als Datenbank. SQLite ist eine leichte, portable und benutzerfreundliche relationale Datenbank, die besonders gut in Umgebungen mit wenig Speicher funktioniert und daher in vielen Fällen gut geeignet ist. Für hochkomplexe Anwendungen, die eine zuverlässigere Datenintegrität und programmatische Erweiterbarkeit benötigen, ist eine PostgreSQL-Datenbank die robustere und flexiblere Wahl. Sie müssen zusätzliche Schritte durchführen, um Ihre Ruby on Rails-Konfiguration für die Verwendung von PostgreSQL einzurichten.

In diesem Tutorial richten Sie eine Ruby on Rails-Entwicklungsumgebung ein, die mit einer PostgreSQL-Datenbank auf einem Ubuntu 20.04-Server verbunden ist. Sie installieren und konfigurieren PostgreSQL und testen Ihre Einrichtung, indem Sie eine Rails-Anwendung erstellen, die PostgreSQL als ihren Datenbankserver verwendet.

Voraussetzungen

In diesem Tutorial benötigen Sie Folgendes:

Schritt 1 – Installation von PostgreSQL

Um Ruby on Rails mit PostgreSQL als Datenbank für Ihre Webanwendung zu konfigurieren, installieren Sie zuerst die Datenbank auf Ihrem Server.

Verwenden Sie sudo-Berechtigungen, um Ihren APT-Paketindex zu aktualisieren und sicherzustellen, dass Ihre Repositories auf dem neuesten Stand sind:

  1. sudo apt update

Installieren Sie anschließend PostgreSQL und dessen Entwicklungsbibliotheken:

  1. sudo apt install postgresql postgresql-contrib libpq-dev

In dem vorherigen Befehl hält das postgresql Paket das Hauptprogramm von PostgreSQL, während postgresql-contrib mehrere PostgreSQL-Funktionen hinzufügt, die seine Fähigkeiten erweitern. libpq-dev ist eine PostgreSQL-Bibliothek, die es Clients ermöglicht, Abfragen zu senden und Antworten vom Back-End-Server zu empfangen, was es Ihrer Anwendung ermöglicht, mit ihrer Datenbank zu kommunizieren.

Nachdem PostgreSQL und seine Abhängigkeiten installiert sind, ist der nächste Schritt das Erstellen einer Rolle, die Ihre Rails-Anwendung später verwenden wird, um Ihre Datenbank zu erstellen.

Schritt 2 – Erstellen einer neuen Datenbankrolle

In PostgreSQL können Rollen verwendet werden, um Berechtigungen und Autorisierung ähnlich wie Benutzer in Linux zu organisieren. In diesem Schritt erstellen Sie eine neue Superuser-Rolle für Ihren Linux-Benutzernamen, die es Ihnen ermöglicht, Datenbanken innerhalb des PostgreSQL-Systems zu erstellen und zu konfigurieren.

Um eine PostgreSQL-Superuser-Rolle zu erstellen, führen Sie den folgenden Befehl aus und ersetzen das hervorgehobene Wort durch Ihren Ubuntu 20.04-Benutzernamen:

  1. sudo -u postgres createuser -s sammy -P

Da Sie die -P-Flagge angegeben haben, werden Sie aufgefordert, ein Passwort für Ihre neue Rolle einzugeben. Geben Sie Ihr gewünschtes Passwort ein und notieren Sie es sich, damit Sie es in einer späteren Konfigurationsdatei verwenden können.

Sie verwenden createuser, um eine Rolle namens sammy (oder Ihren bevorzugten Benutzernamen) zu erstellen. Der -s-Flag gibt diesem Benutzer Superuser-Berechtigungen, und sudo -u ermöglicht es Ihnen, den Befehl vom Konto postgres aus zu starten, das automatisch beim Installieren von PostgreSQL erstellt wird.

Hinweis: Da der Authentifizierungsmodus für PostgreSQL unter Ubuntu standardmäßig als ident startet, kann ein Ubuntu-Benutzer standardmäßig nur in PostgreSQL mit einer Rolle mit dem gleichen Namen arbeiten. Weitere Informationen finden Sie in der PostgreSQL-Offizielle Dokumentation zur Authentifizierung.

Wenn Sie das Flag -P nicht verwendet haben und nach der Erstellung ein Passwort für die Rolle festlegen möchten, geben Sie die PostgreSQL-Konsole mit folgendem Befehl ein:

  1. sudo -u postgres psql

Sie erhalten folgende Ausgabe zusammen mit der Aufforderung für die PostgreSQL-Konsole:

Output
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type "help" for help. postgres=#

Die PostgreSQL-Konsole wird durch die Eingabeaufforderung postgres=# angezeigt. Geben Sie an der PostgreSQL-Eingabeaufforderung diesen Befehl ein, um das Passwort für die neue Datenbankrolle festzulegen, wobei der markierte Name durch den von Ihnen erstellten ersetzt wird:

  1. \password sammy

PostgreSQL fordert Sie nach einem Passwort auf. Geben Sie Ihr gewünschtes Passwort an der Eingabeaufforderung ein und bestätigen Sie es dann.

Verlassen Sie nun die PostgreSQL-Konsole, indem Sie diesen Befehl eingeben:

  1. \q

Ihre übliche Eingabeaufforderung erscheint nun wieder.

In diesem Schritt haben Sie eine neue PostgreSQL-Rolle mit Superuser-Berechtigungen erstellt. Jetzt sind Sie bereit, eine neue Rails-App zu erstellen, die diese Rolle verwendet, um eine Datenbank zu erstellen.

Schritt 3 – Erstellen einer neuen Rails-Anwendung

Mit einer für PostgreSQL konfigurierten Rolle können Sie jetzt eine neue Rails-Anwendung erstellen, die so eingerichtet ist, dass PostgreSQL als Datenbank verwendet wird.

Zuerst navigieren Sie zu Ihrem Home-Verzeichnis:

  1. cd ~

Erstellen Sie eine neue Rails-Anwendung in diesem Verzeichnis und ersetzen Sie appname durch den gewünschten Namen Ihrer App:

  1. rails new appname -d=postgresql

Die Option -d=postgresql legt PostgreSQL als Datenbank fest.

Nachdem Sie diesen Befehl ausgeführt haben, wird im Home-Verzeichnis ein neuer Ordner mit dem Namen appname angezeigt, der alle Elemente einer grundlegenden Rails-Anwendung enthält.

Als nächstes wechseln Sie in das Verzeichnis der Anwendung:

  1. cd appname

Jetzt, da Sie eine neue Rails-Anwendung erstellt haben und sich im Stammverzeichnis Ihres Projekts befinden, können Sie Ihre PostgreSQL-Datenbank innerhalb Ihrer Rails-App konfigurieren und erstellen.

Schritt 4 – Konfigurieren und Erstellen Ihrer Datenbank

Wenn Sie die Entwicklung– und Test-Datenbanken für Ihre Anwendung erstellen, verwendet Rails die PostgreSQL-Rolle, die Sie für Ihren Ubuntu-Benutzernamen erstellt haben. Um sicherzustellen, dass Rails diese Datenbanken erstellt, ändern Sie die Datenbankkonfigurationsdatei Ihres Projekts. Anschließend erstellen Sie Ihre Datenbanken.

Eine der Konfigurationsänderungen, die Sie für Ihre Rails-Anwendung vornehmen müssen, ist das Hinzufügen des Passworts für die PostgreSQL-Rolle, die im letzten Schritt erstellt wurde. Um sensible Informationen wie Passwörter sicher zu speichern, wird empfohlen, das Passwort in einer Umgebungsvariable zu speichern, anstatt es direkt in Ihrer Konfigurationsdatei zu schreiben.

Um Ihr Passwort bei der Anmeldung in einer Umgebungsvariable zu speichern, führen Sie den folgenden Befehl aus und ersetzen Sie APPNAME durch den Namen Ihrer App und PostgreSQL_Role_Password durch das Passwort, das Sie im letzten Schritt erstellt haben:

  1. echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

Dieser Befehl schreibt den export-Befehl in Ihre ~/.bashrc-Datei, damit die Umgebungsvariable bei der Anmeldung gesetzt wird.

Um die Variable für Ihre aktuelle Sitzung zu exportieren, verwenden Sie den Befehl source:

  1. source ~/.bashrc

Jetzt, da Sie Ihr Passwort in Ihrer Umgebung gespeichert haben, können Sie die Konfigurationsdatei ändern.

Öffnen Sie die Datenbankkonfigurationsdatei Ihrer Anwendung in Ihrem bevorzugten Texteditor. Dieses Tutorial verwendet nano:

  1. nano config/database.yml

Unter dem default-Abschnitt finden Sie die Zeile, die lautet pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> und fügen Sie die folgenden hervorgehobenen Zeilen hinzu, füllen Sie Ihre Anmeldeinformationen und die erstellte Umgebungsvariable ein. Es sollte ungefähr so aussehen:

config/database.yml
...
default: &default
  adapter: postgresql
  encoding: unicode
  # Für Details zur Verbindungspooling siehe den Rails-Konfigurationsleitfaden
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

Dieses Update ermöglicht es der Rails-Anwendung, die Datenbank mit der richtigen Rolle und dem richtigen Passwort auszuführen. Speichern und beenden Sie durch Drücken von CTRL + x, Y und dann ENTER.

Weitere Informationen zur Konfiguration von Datenbanken in Rails finden Sie in der Rails-Dokumentation.

Da Sie Änderungen an der Datei config/database.yml vorgenommen haben, erstellen Sie die Datenbanken Ihrer Anwendung mit dem rails-Befehl:

  1. rails db:create

Nachdem Rails die Datenbank erstellt hat, erhalten Sie die folgende Ausgabe:

Output
Created database 'appname_development' Created database 'appname_test'

Wie die Ausgabe vorschlägt, hat dieser Befehl eine development– und eine test-Datenbank in Ihrem PostgreSQL-Server erstellt.

Sie haben jetzt eine PostgreSQL-Datenbank mit Ihrer Rails-Anwendung verbunden. Um sicherzustellen, dass Ihre Anwendung funktioniert, werden Sie jetzt Ihre Konfiguration testen.

Schritt 5 – Testen Ihrer Konfiguration

Um zu überprüfen, ob Ihre Anwendung die PostgreSQL-Datenbank verwenden kann, führen Sie Ihre Webanwendung aus, sodass sie im Browser angezeigt wird.

Mit dem Befehl rails server starten Sie Ihre Webanwendung auf dem integrierten Webserver in Ihrer Rails-Anwendung, Puma:

  1. rails server --binding=127.0.0.1

--binding bindet Ihre Anwendung an eine angegebene IP. Standardmäßig bindet dieses Flag Rails an 0.0.0.0, was bedeutet, dass Rails auf alle Schnittstellen hört, daher ist es sicherer, 127.0.0.1 zu verwenden, um den localhost anzugeben. Standardmäßig hört die Anwendung auf Port 3000.

Sobald Ihre Rails-Anwendung läuft, wird Ihr Befehlszeilenprompt verschwinden und durch diese Ausgabe ersetzt:

Output
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 Use Ctrl-C to stop

Um zu testen, ob Ihre Anwendung läuft, öffnen Sie ein neues Terminalfenster auf Ihrem Server und verwenden Sie den curl-Befehl, um eine Anfrage an 127.0.0.1:3000 zu senden:

  1. curl http://127.0.0.1:3000

Sie erhalten eine Menge HTML-Ausgaben, die mit etwas Ähnlichem enden:

Output
... <strong>Rails version:</strong> 7.0.4<br /> <strong>Ruby version:</strong> 3.1.2 (x86_64-linux) </p> </section> </div> </body> </html>

Wenn Ihre Rails-Anwendung auf einem entfernten Server liegt und Sie darauf über einen Webbrowser zugreifen möchten, können Sie sie an die öffentliche IP-Adresse Ihres Servers binden. Öffnen Sie zunächst Port 3000 in Ihrer Firewall:

  1. sudo ufw allow 3000

Suchen Sie als nächstes die öffentliche IP-Adresse Ihres Servers. Sie können dies ausführen, indem Sie den folgenden curl-Befehl ausführen:

  1. curl http://icanhazip.com

Dies gibt Ihre öffentliche IP-Adresse zurück. Verwenden Sie sie mit dem Befehl rails server, indem Sie server_public_IP durch die öffentliche IP Ihres Servers ersetzen:

  1. rails server --binding=server_public_IP

Jetzt können Sie Ihre Rails-Anwendung in einem lokalen Webbrowser über die öffentliche IP-Adresse des Servers und den Port 3000 aufrufen, indem Sie folgende Adresse besuchen:

http://server_public_IP:3000

Auf dieser URL finden Sie eine Ruby-on-Rails-Seite:

Wenn Sie auf die Startseite zugreifen können, ist Ihre Anwendung ordnungsgemäß konfiguriert und mit der PostgreSQL-Datenbank verbunden.

Nach dem Testen der Konfiguration, wenn Sie den Port 3000 schließen möchten, verwenden Sie den folgenden Befehl.

  1. sudo ufw delete allow 3000

Abschluss

In diesem Tutorial haben Sie eine Ruby on Rails-Webanwendung erstellt, die auf einem Ubuntu 20.04-Server so konfiguriert war, dass sie PostgreSQL als Datenbank verwendet. Wenn Sie mehr über die Ruby-Programmiersprache erfahren möchten, schauen Sie sich unsere Serie zu Wie man in Ruby codiert an.

Für weitere Informationen zur Auswahl einer Datenbank für Ihre Anwendung lesen Sie unser Tutorial zu den Unterschieden und Anwendungsfällen von SQLite, PostgreSQL und MySQL. Wenn Sie mehr über die Verwendung von Datenbanken erfahren möchten, lesen Sie den Artikel Eine Einführung in Abfragen in PostgreSQL oder erkunden Sie das Managed Databases-Produkt von DigitalOcean.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04