Introduzione
Quando si utilizza il framework web Ruby on Rails, l’applicazione utilizzerà di default il database SQLite. SQLite è un database relazionale leggero, portatile e facile da usare che si comporta particolarmente bene in ambienti a bassa memoria, quindi funzionerà bene in molti casi. Tuttavia, per applicazioni molto complesse che necessitano di un’integrità dei dati più affidabile e di una estensibilità programmabile, un database PostgreSQL sarà una scelta più robusta e flessibile. Sarà necessario eseguire ulteriori passaggi per configurare il tuo ambiente Ruby on Rails per utilizzare PostgreSQL.
In questo tutorial, configurerai un ambiente di sviluppo Ruby on Rails connesso a un database PostgreSQL su un server Ubuntu 20.04. Installerai e configurerai PostgreSQL, quindi testerai la tua configurazione creando un’applicazione Rails che utilizza PostgreSQL come server di database.
Prerequisiti
Questo tutorial richiede quanto segue:
-
Un server Ubuntu 20.04 configurato seguendo la Guida alla configurazione iniziale del server per Ubuntu 20.04, comprensivo di un utente non-root con privilegi sudo e un firewall.
-
Un ambiente di sviluppo Ruby on Rails installato sul tuo server Ubuntu 20.04. Per configurarlo, segui Come installare Ruby on Rails con rbenv su Ubuntu 20.04. Questo tutorial utilizzerà la versione 3.1.2 di Ruby e 7.0.4 di Rails; per informazioni sulle ultime versioni, controlla i siti ufficiali di Ruby e Rails.
Passaggio 1 – Installazione di PostgreSQL
Per configurare Ruby on Rails con PostgreSQL come database per la tua applicazione web, installerai prima il database sul tuo server.
Utilizzando i privilegi sudo
, aggiorna l’indice dei pacchetti APT per assicurarti che i tuoi repository siano aggiornati:
- sudo apt update
Successivamente, installa PostgreSQL e le sue librerie di sviluppo:
- sudo apt install postgresql postgresql-contrib libpq-dev
Nel comando precedente, il pacchetto postgresql
contiene il programma principale di PostgreSQL, mentre postgresql-contrib
aggiunge diverse funzionalità di PostgreSQL che estendono le sue capacità. libpq-dev
è una libreria di PostgreSQL che consente ai client di inviare query e ricevere risposte dal server di back-end, il che consentirà alla tua applicazione di comunicare con il suo database.
Una volta installati PostgreSQL e le sue dipendenze, il passo successivo è creare un ruolo che la tua applicazione Rails utilizzerà in seguito per creare il database.
Passo 2 – Creazione di un Nuovo Ruolo del Database
In PostgreSQL, ruoli possono essere utilizzati per organizzare autorizzazioni e autorizzazioni allo stesso modo dei utenti in Linux. In questo passaggio, creerai un nuovo ruolo di super utente per il tuo nome utente Linux che ti consentirà di creare e configurare database all’interno del sistema PostgreSQL.
Per creare un ruolo di super utente di PostgreSQL, esegui il seguente comando, sostituendo la parola evidenziata con il tuo nome utente Ubuntu 20.04:
- sudo -u postgres createuser -s sammy -P
Dato che hai specificato il flag -P
, ti verrà chiesto di inserire una password per il tuo nuovo ruolo. Inserisci la password desiderata, assicurandoti di registrarla in modo da poterla utilizzare in un file di configurazione in un passaggio successivo.
Usa createuser
per creare un ruolo chiamato sammy
(o il nome utente preferito). Il flag -s
conferisce a questo utente privilegi di super utente, e sudo -u
ti consente di eseguire il comando dall’account postgres
creato automaticamente durante l’installazione di PostgreSQL.
Nota: Poiché la modalità di autenticazione per PostgreSQL su Ubuntu inizia come ident
, di default un utente Ubuntu può operare in PostgreSQL solo con un ruolo dello stesso nome. Per ulteriori informazioni, consulta la documentazione ufficiale di PostgreSQL sull’autenticazione.
Se non hai utilizzato il flag -P
e desideri impostare una password per il ruolo dopo averlo creato, accedi alla console di PostgreSQL con il seguente comando:
- sudo -u postgres psql
Riceverai l’output seguente, insieme al prompt per la console di PostgreSQL:
Outputpsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
La console di PostgreSQL è indicata dal prompt postgres=#
. Nel prompt di PostgreSQL, inserisci questo comando per impostare la password per il nuovo ruolo del database, sostituendo il nome evidenziato con quello che hai creato:
- \password sammy
PostgreSQL ti chiederà una password. Inserisci la password desiderata al prompt, quindi confermala.
Ora esci dalla console di PostgreSQL inserendo questo comando:
- \q
Il tuo prompt usuale riapparirà ora.
In questo passaggio, hai creato un nuovo ruolo PostgreSQL con privilegi di super utente. Ora sei pronto per creare una nuova app Rails che utilizza questo ruolo per creare un database.
Passaggio 3 – Creazione di una Nuova Applicazione Rails
Con un ruolo configurato per PostgreSQL, puoi ora creare una nuova applicazione Rails configurata per utilizzare PostgreSQL come database.
Prima di tutto, naviga nella tua directory home:
- cd ~
Crea una nuova applicazione Rails in questa directory, sostituendo nomeapp
con quello che desideri chiamare la tua app:
- rails new appname -d=postgresql
L’opzione -d=postgresql
imposta PostgreSQL come database.
Dopo aver eseguito questo comando, comparirà una nuova cartella chiamata nomeapp
nella tua directory home, contenente tutti gli elementi di una applicazione Rails di base.
Successivamente, spostati nella directory dell’applicazione:
- cd appname
Ora che hai creato una nuova applicazione Rails e ti sei spostato nella directory principale del tuo progetto, puoi configurare e creare il tuo database PostgreSQL dall’interno della tua app Rails.
Passaggio 4 – Configurazione e Creazione del Tuo Database
Quando si creano i database development
e test
per la tua applicazione, Rails utilizzerà il ruolo PostgreSQL che hai creato per il tuo nome utente Ubuntu. Per garantire che Rails crei questi database, modificherai il file di configurazione del database del tuo progetto. Successivamente, creerai i tuoi database.
Una delle modifiche alla configurazione da apportare per la tua applicazione Rails è aggiungere la password per il ruolo PostgreSQL creato nell’ultimo passaggio. Per mantenere al sicuro informazioni sensibili come le password, si consiglia di memorizzare la password in una variabile di ambiente piuttosto che scriverla direttamente nel file di configurazione.
Per memorizzare la tua password in una variabile di ambiente al login, esegui il seguente comando, sostituendo NOMEDAPP
con il nome della tua app e Password_Ruolo_PostgreSQL
con la password che hai creato nell’ultimo passaggio:
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
Questo comando scrive il comando export
nel tuo file ~/.bashrc
in modo che la variabile di ambiente venga impostata al login.
Per esportare la variabile per la sessione corrente, usa il comando source
:
- source ~/.bashrc
Ora che hai memorizzato la tua password nell’ambiente, puoi modificare il file di configurazione.
Apri il file di configurazione del database dell’applicazione nel tuo editor di testo preferito. Questo tutorial utilizzerà nano
:
- nano config/database.yml
Sotto la sezione default
, trova la riga che dice pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
e aggiungi le seguenti linee evidenziate, compilando le tue credenziali e la variabile di ambiente creata. Dovrebbe assomigliare a qualcosa del genere:
...
default: &default
adapter: postgresql
encoding: unicode
# Per i dettagli sul pooling delle connessioni, consultare la guida alla configurazione di Rails
# 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
...
Questa aggiornamento farà funzionare l’applicazione Rails con il database con il ruolo e la password corretti. Salva ed esci premendo CTRL
+ x
, Y
, quindi ENTER
.
Per ulteriori informazioni sulla configurazione dei database in Rails, consultare la documentazione di Rails.
Ora che hai apportato modifiche a config/database.yml
, crea i database dell’applicazione utilizzando il comando rails
:
- rails db:create
Una volta che Rails ha creato il database, riceverai il seguente output:
OutputCreated database 'appname_development'
Created database 'appname_test'
Come suggerisce l’output, questo comando ha creato un database development
e test
nel tuo server PostgreSQL.
Ora hai un database PostgreSQL collegato alla tua app Rails. Per assicurarti che la tua applicazione funzioni, testerai ora la tua configurazione.
Passaggio 5 – Test della tua configurazione
Per verificare che la tua applicazione sia in grado di utilizzare il database PostgreSQL, eseguirai la tua applicazione web in modo che appaia in un browser.
Utilizzando il comando rails server
, esegui la tua applicazione web sul server web integrato nella tua app Rails, Puma:
- rails server --binding=127.0.0.1
--binding
lega la tua applicazione a un IP specificato. Per default, questo flag legherà Rails a 0.0.0.0
, il che significa che Rails ascolterà tutte le interfacce, quindi è più sicuro utilizzare 127.0.0.1
per specificare il localhost
. Per default, l’applicazione ascolta sulla porta 3000
.
Una volta che la tua app Rails è in esecuzione, il tuo prompt dei comandi scomparirà, sostituito da questo output:
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
Per testare se la tua applicazione è in esecuzione, apri una nuova finestra del terminale sul tuo server e utilizza il comando curl
per inviare una richiesta a 127.0.0.1:3000
:
- curl http://127.0.0.1:3000
Riceverai molte righe di output in HTML, che termineranno con qualcosa del genere:
Output...
<strong>Rails version:</strong> 7.0.4<br />
<strong>Ruby version:</strong> 3.1.2 (x86_64-linux)
</p>
</section>
</div>
</body>
</html>
Se la tua applicazione Rails è su un server remoto e vuoi accedervi tramite un browser web, puoi legarla all’indirizzo IP pubblico del tuo server. Prima, apri la porta 3000
nel tuo firewall:
- sudo ufw allow 3000
Successivamente, cerca l’indirizzo IP pubblico del tuo server. Puoi farlo eseguendo il seguente comando curl
:
- curl http://icanhazip.com
Questo restituirà il tuo indirizzo IP pubblico. Usalo con il comando rails server
, sostituendo server_public_IP
con l’indirizzo IP pubblico del tuo server:
- rails server --binding=server_public_IP
Ora sarai in grado di accedere alla tua applicazione Rails in un browser web locale tramite l’indirizzo IP pubblico del server sulla porta 3000
visitando:
http://server_public_IP:3000
A questo URL, troverai una pagina Ruby on Rails:
Se riesci ad accedere alla homepage, la tua applicazione è correttamente configurata e connessa al database PostgreSQL.
Dopo aver testato la configurazione, se desideri chiudere la porta 3000
, utilizza il seguente comando.
- sudo ufw delete allow 3000
Conclusione
In questo tutorial, hai creato un’applicazione web Ruby on Rails configurata per utilizzare PostgreSQL come database su un server Ubuntu 20.04. Se desideri saperne di più sul linguaggio di programmazione Ruby, dai un’occhiata alla nostra serie su Come Programmare in Ruby.
Per ulteriori informazioni sulla scelta di un database per la tua applicazione, consulta il nostro tutorial sulle differenze e sugli utilizzi di SQLite, PostgreSQL e MySQL. Se vuoi leggere di più su come utilizzare i database, consulta l’articolo Un’introduzione alle Query in PostgreSQL, oppure esplora il prodotto Managed Databases di DigitalOcean.