Hoe PostgreSQL te gebruiken met uw Ruby on Rails-toepassing op Ubuntu 20.04

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:

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:

  1. sudo apt update

Vervolgens, installeer PostgreSQL en zijn ontwikkelingsbibliotheken:

  1. 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:

  1. 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:

  1. sudo -u postgres psql

Je ontvangt de volgende uitvoer, samen met de prompt voor de PostgreSQL-console:

Output
psql (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:

  1. \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:

  1. \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:

  1. cd ~

Maak een nieuwe Rails applicatie in deze directory, waarbij u appnaam vervangt door wat u uw app wilt noemen:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

config/database.yml
...
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:

  1. rails db:create

Zodra Rails de database heeft aangemaakt, krijg je de volgende output:

Output
Created 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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.

  1. 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.

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