Introductie
Bij het gebruik van het Ruby on Rails-webframework zal je toepassing standaard SQLite als database gebruiken. SQLite is een lichte, draagbare en gebruiksvriendelijke relationele database die bijzonder goed presteert in omgevingen met weinig geheugen, dus het zal goed werken in veel gevallen. Voor zeer complexe toepassingen die meer betrouwbare gegevensintegriteit en programmatische uitbreidbaarheid vereisen, is een PostgreSQL-database een robuustere en flexibelere keuze. Je moet extra stappen uitvoeren om je Ruby on Rails-configuratie in te stellen voor het gebruik van PostgreSQL.
In deze tutorial stel je een Ruby on Rails-ontwikkelingsomgeving in die is verbonden met een PostgreSQL-database op een Ubuntu 20.04-server. Je installeert en configureert PostgreSQL en test vervolgens je setup door een Rails-toepassing te maken die PostgreSQL als databaseserver gebruikt.
Vereisten
Deze tutorial vereist het volgende:
-
Een Ubuntu 20.04-server opgezet door de Initiële serverinstallatiehandleiding voor Ubuntu 20.04, inclusief een niet-rootgebruiker met sudo-rechten en een firewall.
-
Een Ruby on Rails ontwikkelomgeving geïnstalleerd op je Ubuntu 20.04 server. Om dit in te stellen, volg Hoe Ruby on Rails te Installeren met rbenv op Ubuntu 20.04. Deze handleiding zal versie 3.1.2 van Ruby en 7.0.4 van Rails gebruiken; voor informatie over de laatste versies, bekijk de officiële sites voor Ruby en Rails.
Stap 1 – PostgreSQL Installeren
Om Ruby on Rails met PostgreSQL als een database voor je webapplicatie te configureren, zul je eerst de database op je server installeren.
Gebruik sudo
bevoegdheden, update je APT pakketindex om zeker te zijn dat je repositories up-to-date zijn:
- sudo apt update
Vervolgens, installeer PostgreSQL en zijn ontwikkelingsbibliotheken:
- sudo apt install postgresql postgresql-contrib libpq-dev
In de vorige opdracht houdt het postgresql
-pakket het hoofdprogramma van PostgreSQL vast, terwijl postgresql-contrib
verschillende PostgreSQL-functies toevoegt die de mogelijkheden uitbreiden. libpq-dev
is een PostgreSQL-bibliotheek waarmee clients vragen kunnen verzenden en antwoorden van de server kunnen ontvangen, zodat je applicatie kan communiceren met de database.
Zodra PostgreSQL en de benodigde pakketten zijn geïnstalleerd, is de volgende stap het aanmaken van een rol die je Rails-applicatie later zal gebruiken om je database te creëren.
Stap 2 – Een nieuwe database-rol aanmaken
In PostgreSQL kunnen rollen worden gebruikt om machtigingen en autorisatie te organiseren, vergelijkbaar met gebruikers in Linux. In deze stap maak je een nieuwe supergebruikersrol aan voor je Linux-gebruikersnaam, zodat je databases kunt creëren en configureren binnen het PostgreSQL-systeem.
Om een PostgreSQL-supergebruikersrol aan te maken, voer je de volgende opdracht uit, waarbij je het gemarkeerde woord vervangt door je Ubuntu 20.04-gebruikersnaam:
- sudo -u postgres createuser -s sammy -P
Omdat je de -P
-vlag hebt opgegeven, wordt je gevraagd een wachtwoord in te voeren voor je nieuwe rol. Voer je gewenste wachtwoord in en zorg ervoor dat je het noteert, zodat je het kunt gebruiken in een configuratiebestand in een latere stap.
Je gebruikt createuser
om een rol met de naam sammy
(of je voorkeursgebruikersnaam) aan te maken. De -s
-vlag geeft deze gebruiker supergebruikersrechten, en sudo -u
stelt je in staat de opdracht uit te voeren vanuit het postgres
-account dat automatisch wordt aangemaakt bij het installeren van PostgreSQL.
Opmerking: Aangezien de authenticatiemodus voor PostgreSQL op Ubuntu standaard begint als ident
, kan een Ubuntu-gebruiker standaard alleen werken in PostgreSQL met een rol met dezelfde naam. Voor meer informatie kun je de PostgreSQL officiële documentatie over authenticatie raadplegen.
Als je de -P
-vlag niet hebt gebruikt en een wachtwoord wilt instellen voor de rol nadat je deze hebt aangemaakt, ga dan naar de PostgreSQL-console met de volgende opdracht:
- sudo -u postgres psql
Je ontvangt de volgende uitvoer, samen met de prompt voor de PostgreSQL-console:
Outputpsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
De PostgreSQL-console wordt aangegeven door de postgres=#
-prompt. Voer op de PostgreSQL-prompt deze opdracht in om het wachtwoord voor de nieuwe databaserol in te stellen, waarbij je de gemarkeerde naam vervangt door degene die je hebt aangemaakt:
- \password sammy
PostgreSQL zal je om een wachtwoord vragen. Voer je gewenste wachtwoord in bij de prompt en bevestig het.
Nu kun je de PostgreSQL-console verlaten door deze opdracht in te voeren:
- \q
Je gebruikelijke prompt verschijnt nu weer.
In deze stap heb je een nieuwe PostgreSQL-rol met supergebruikersrechten aangemaakt. Nu ben je klaar om een nieuwe Rails-app te maken die deze rol gebruikt om een database aan te maken.
Stap 3 – Het maken van een nieuwe Rails applicatie
Met een rol geconfigureerd voor PostgreSQL, kunt u nu een nieuwe Rails applicatie maken die is ingesteld om PostgreSQL als database te gebruiken.
Eerst navigeert u naar uw home-directory:
- cd ~
Maak een nieuwe Rails applicatie in deze directory, waarbij u appnaam
vervangt door wat u uw app wilt noemen:
- rails new appname -d=postgresql
De -d=postgresql
optie stelt PostgreSQL in als de database.
Zodra u dit commando hebt uitgevoerd, verschijnt er een nieuwe map met de naam appnaam
in uw home-directory, met alle elementen van een basis Rails applicatie.
Vervolgens gaat u naar de directory van de applicatie:
- cd appname
Nu u een nieuwe Rails applicatie hebt gemaakt en naar de hoofdmap van uw project bent verplaatst, kunt u uw PostgreSQL database configureren en maken vanuit uw Rails app.
Stap 4 – Configureren en maken van uw database
Bij het maken van de ontwikkeling
en test
databases voor uw toepassing zal Rails de PostgreSQL rol gebruiken die u heeft aangemaakt voor uw Ubuntu gebruikersnaam. Om ervoor te zorgen dat Rails deze databases maakt, zult u het database configuratiebestand van uw project aanpassen. Vervolgens zult u uw databases aanmaken.
Een van de configuratiewijzigingen die u moet aanbrengen voor uw Rails toepassing is het toevoegen van het wachtwoord voor de PostgreSQL rol die in de vorige stap is aangemaakt. Om gevoelige informatie zoals wachtwoorden veilig te houden, wordt aanbevolen om het wachtwoord op te slaan in een omgevingsvariabele in plaats van het direct in uw configuratiebestand te schrijven.
Om uw wachtwoord op te slaan in een omgevingsvariabele bij het inloggen, voert u het volgende commando uit, waarbij u APPNAME
vervangt door de naam van uw app en PostgreSQL_Role_Password
door het wachtwoord dat u in de vorige stap heeft aangemaakt:
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
Dit commando schrijft het export
commando naar uw ~/.bashrc
bestand zodat de omgevingsvariabele bij het inloggen wordt ingesteld.
Om de variabele voor uw huidige sessie te exporteren, gebruikt u het source
commando:
- source ~/.bashrc
Nu u uw wachtwoord heeft opgeslagen in uw omgeving, kunt u het configuratiebestand aanpassen.
Open het database configuratiebestand van uw toepassing in uw voorkeurteksteditor. Deze handleiding zal nano
gebruiken:
- nano config/database.yml
Onder de standaard
sectie, zoek de regel die zegt pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
en voeg de volgende gemarkeerde regels toe, vul uw referenties en de omgevingsvariabele die u heeft aangemaakt in. Het zou er ongeveer zo uit moeten zien:
...
default: &default
adapter: postgresql
encoding: unicode
# Voor details over verbindingspooling, zie de Rails configuratiehandleiding
# 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
...
Met deze update zal de Rails applicatie de database laten draaien met de juiste rol en wachtwoord. Sla op en verlaat door CTRL
+ x
, Y
, dan ENTER
in te drukken.
Voor meer informatie over het configureren van databases in Rails, zie de Rails documentatie.
Nu je wijzigingen hebt aangebracht in config/database.yml
, maak de databases van je applicatie aan met het rails
commando:
- rails db:create
Zodra Rails de database heeft aangemaakt, krijg je de volgende output:
OutputCreated database 'appname_development'
Created database 'appname_test'
Zoals de output aangeeft, heeft dit commando een development
en test
database aangemaakt in je PostgreSQL server.
Je hebt nu een PostgreSQL database verbonden met je Rails app. Om te controleren of je applicatie werkt, test je nu je configuratie.
Stap 5 – Testen van je Configuratie
Om te testen of je applicatie in staat is om de PostgreSQL database te gebruiken, voer je je webapplicatie uit zodat deze in een browser verschijnt.
Gebruik het rails server
commando om je webapplicatie uit te voeren op de ingebouwde webserver in je Rails app, Puma:
- rails server --binding=127.0.0.1
--binding
bindt je applicatie aan een gespecificeerd IP. Standaard zal deze vlag Rails binden aan 0.0.0.0
, wat betekent dat Rails zal luisteren naar alle interfaces, dus het is veiliger om 127.0.0.1
te gebruiken om de localhost
aan te geven. Standaard luistert de applicatie op poort 3000
.
Zodra je Rails-applicatie draait, zal je opdrachtprompt verdwijnen, vervangen door deze uitvoer:
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
Om te testen of je applicatie draait, open je een nieuw terminalvenster op je server en gebruik je het curl
-commando om een verzoek te sturen naar 127.0.0.1:3000
:
- curl http://127.0.0.1:3000
Je ontvangt veel HTML-uitvoer, eindigend in iets als:
Output...
<strong>Rails version:</strong> 7.0.4<br />
<strong>Ruby version:</strong> 3.1.2 (x86_64-linux)
</p>
</section>
</div>
</body>
</html>
Als je Rails-applicatie op een externe server staat en je wilt er toegang toe krijgen via een webbrowser, dan kun je het binden aan het openbare IP-adres van je server. Open eerst poort 3000
in je firewall:
- sudo ufw allow 3000
Vervolgens zoek je het openbare IP-adres van je server op. Dit kun je doen door het volgende curl
-commando uit te voeren:
- curl http://icanhazip.com
Dit zal je openbare IP-adres retourneren. Gebruik het met het rails server
-commando, waarbij je server_public_IP
vervangt door het openbare IP van je server:
- rails server --binding=server_public_IP
Nu kun je toegang krijgen tot je Rails-applicatie in een lokale webbrowser via het openbare IP-adres van de server op poort 3000
door te bezoeken:
http://server_public_IP:3000
Op deze URL vind je een Ruby on Rails-pagina:
Als je toegang hebt tot de startpagina, is je applicatie correct geconfigureerd en verbonden met de PostgreSQL-database.
Na het testen van de configuratie, als je poort 3000
wilt sluiten, gebruik dan het volgende commando.
- sudo ufw delete allow 3000
Conclusie
In deze handleiding heb je een Ruby on Rails webapplicatie gemaakt die geconfigureerd was om PostgreSQL als database te gebruiken op een Ubuntu 20.04 server. Als je meer wilt weten over de Ruby-programmeertaal, bekijk dan onze serie over Hoe te coderen in Ruby.
Voor meer informatie over het kiezen van een database voor je applicatie, bekijk onze handleiding over de verschillen en gebruiksmogelijkheden van SQLite, PostgreSQL en MySQL. Als je meer wilt lezen over het gebruik van databases, zie het artikel Een inleiding tot queries in PostgreSQL, of verken het product Managed Databases van DigitalOcean.