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:
-
Einen Ubuntu 20.04-Server, der gemäß dem Anleitung zur ersten Servereinrichtung für Ubuntu 20.04 eingerichtet wurde, einschließlich eines Nicht-Root-Benutzers mit sudo-Berechtigungen und einer Firewall.
-
Eine Ruby on Rails-Entwicklungsumgebung auf Ihrem Ubuntu 20.04 Server installiert. Um dies einzurichten, folgen Sie dem Installationsleitfaden für Ruby on Rails mit rbenv auf Ubuntu 20.04. Dieses Tutorial verwendet Version 3.1.2 von Ruby und 7.0.4 von Rails; für Informationen zu den neuesten Versionen, besuchen Sie die offiziellen Websites von Ruby und Rails.
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:
- sudo apt update
Installieren Sie anschließend PostgreSQL und dessen Entwicklungsbibliotheken:
- 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:
- 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:
- sudo -u postgres psql
Sie erhalten folgende Ausgabe zusammen mit der Aufforderung für die PostgreSQL-Konsole:
Outputpsql (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:
- \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:
- \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:
- cd ~
Erstellen Sie eine neue Rails-Anwendung in diesem Verzeichnis und ersetzen Sie appname
durch den gewünschten Namen Ihrer App:
- 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:
- 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:
- 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
:
- 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
:
- 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:
...
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:
- rails db:create
Nachdem Rails die Datenbank erstellt hat, erhalten Sie die folgende Ausgabe:
OutputCreated 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:
- 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:
- 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:
- 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:
- 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:
- 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.
- 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.