window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Una semplice applicazione Ruby da zero con Active Record - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2021-07-07
Sviluppo di software

Una semplice applicazione Ruby da zero con Active Record

The Codest

Damian Watroba

Software Engineer

MVC è un modello di progettazione che divide le responsabilità di un'applicazione per facilitarne la gestione. Rails segue questo modello di progettazione per convenzione.

Mi piace lavorare con Rotaie perché posso creare facilmente e rapidamente un'applicazione che funziona e mostrarla al mondo o solo ai miei amici. Tuttavia, ci sono tipi di applicazioni che non hanno bisogno di un framework così ampio come Rotaie e tutte le sue funzionalità.

Può accadere che la nostra applicazione abbia bisogno solo di M (Model) dell'intero pattern MVC. Modello-Controllore. Vale la pena di avviare un progetto in Rotaie se sappiamo che la parte V-C (View-Controller) non sarà necessaria?

È bene sapere che Record attivo Active Model, Action Pack e Action View, responsabili di MVC, possono essere utilizzati in modo indipendente al di fuori di Rotaie. Questo ci permette di creare un semplice Applicazione Ruby che ha una connessione al database e svilupparlo senza le inutili codice e le librerie che otterremmo in un pacchetto eseguendo il comando rails new.

Ho descritto passo per passo come ottenere questo risultato e potete trovare l'intero codice su GitHub. Il link è in fondo a questo articolo. 

Struttura

Per iniziare il nostro progetto, non abbiamo bisogno di molto. Iniziamo creando un oggetto Profilo delle gemme dove aggiungiamo le gemme necessarie per lavorare sull'applicazione, insieme alla versione di Rubino che utilizzeremo.

 cat Gemfile

# frozen_string_literal: true

sorgente 'https://rubygems.org'

rubino '2.7.2'

Un'opzione README.md è quello di descrivere come funziona la nostra applicazione e come continuare a lavorarci, sia per noi stessi che per altri sviluppatori che vorranno sviluppare il progetto con noi in futuro.

cat README.md

Applicazione #

DA FARE: Cancellare questo e il testo precedente e descrivere la propria applicazione.

app con applicazione.rb che sarà responsabile della configurazione e del caricamento delle librerie e dei file che aggiungeremo alla nostra applicazione. Ricordate di eseguire installare il bundle per generare il Gemfile.lock. La struttura della nostra applicazione in questa fase dovrebbe essere la seguente:

albero
 .
 ├── Gemfile
 ├── Gemfile.lock
 ├── README.md
 └─── app
     └── applicazione.rb

Database

Una volta preparata la struttura, possiamo pensare a quale motore di database scegliere e configurare. Per questo articolo ho scelto PostgresQL, con il quale ho la massima esperienza. Può trattarsi anche di MySQL o SQlite3, o di qualsiasi altro motore che lavora con Record attivo. Quando si sceglie la tecnologia, è bene lasciarsi guidare dallo scopo dell'applicazione, per cosa verrà utilizzata e quale sarà il suo scopo. 

Per una configurazione rapida e semplice del database, ho usato docker e docker-compose. Non voglio dilungarmi sulla configurazione di questi strumenti, sui loro pro e contro, ma se non avete mai usato docker prima d'ora vi rimando alla documentazione ufficiale di Docker e Docker Compose per maggiori informazioni.

# docker-compose.yml

versione: "3.7".
servizi:
  postgresql:
    immagine: postgres:12.0-alpine
    porte:
- 5432:5432
    ambiente:
- PGDATA=/postgresql
- POSTGRESPASSWORD=postgres
- UTENTE POSTGRES=postgres
    volumi:
- db-volume:/postgresql
volumi:
  db-volume:

Dovremo anche aggiungere al nostro file Profilo delle gemme

 gemma 'pg'

e al nostro applicazione.rb file

# app/application.rb

richiedere 'pg'

modulo Applicazione

  classe Error < StandardError; fine

# Il vostro codice va qui...

fine

Migrazioni autonome, Rake

Il passo successivo nella configurazione della nostra applicazione è l'aggiunta dell'elemento migrazioni_autonome e rastrello che ci permetterà di gestire le migrazioni come in Rails e di accedere ai comandi di rake db:. 

  1. Aggiornamento Profilo delle gemme con le gemme necessarie e fare un installare il bundle
gemma # utilizzata in applicazioni non ferroviarie e non rubbiche

gemma 'standalone_migrations'

# standalone_migrations ha bisogno di rake per poter creare migrazioni ed eseguirle, come in Rails

gemma 'rake'

# Gemma necessaria per caricare le variabili d'ambiente

gemma 'dotenv'
  1. Aggiungiamo un Profilo del rastrello al nostro progetto nella cartella principale, dove caricheremo dotenv e migrazioni_autonome che abbiamo aggiunto in precedenza 
# frozen_string_literal: true

richiedere 'dotenv'

Dotenv.load

richiedere 'standalone_migrations'

StandaloneMigrations::Tasks.load_tasks

Con il Profilo del rastrello configurato in questo modo, possiamo controllare se il nostro rastrello funziona utilizzando l'opzione rastrello -T che dovrebbe restituire un elenco di comandi disponibili nella nostra applicazione.

applicazione ruby
  1. Prima rake db:createMa abbiamo ancora bisogno di un file di configurazione nel nostro progetto per connetterci all'istanza di Postgres. Per farlo, dobbiamo creare una cartella db e una cartella config.yml che dovrebbe assomigliare a quello qui sotto:
# db/config.yml

predefinito: &default

  adattatore: postgresql

  codifica: unicode

  pool: 

  database: 

  nome utente: 

  password: 

  host: 

  porta: 

sviluppo:

  <<: *default

test:

  <<: *default

messa in scena:

  <<: *default

produzione:

  <<: *default

Come si può vedere, ho usato le variabili d'ambiente per configurare la connessione al nostro Postgres, dove conserveremo i dati sensibili che non dovrebbero essere presenti nel repository. Per questo ho usato la variabile d'ambiente gemma dotenv, che è stato aggiunto anche nel Profilo del rastrello insieme a migrazioni_autonome. Se stiamo usando Git per gestire il controllo di versione della nostra applicazione, ricordiamoci di aggiungere un file .gitignore in cui disabiliteremo la possibilità di tracciare il file .env dal nostro progetto.

 # .gitignore
.env*
!.env.example

e aggiungere un.env contenente il file ENV correttamente configurato

# .env

DATABASE_NAME="sviluppo"

UTENTE_DATABASE="postgres"

DATABASE_PASSWORD="postgres"

DATABASE_HOST="localhost"

DATABASE_PORT="5432"
  1. A questo punto, dovremmo essere in grado di eseguire il programma rake db:create che creerà il database

    Applicazione web in Ruby

  2. Proviamo ad aggiungere una nuova migrazione tramite rake db:new_migration name=, dove creiamo un file posti tavolo con un :titolo colonna

    Applicazione web Rails

# frozen_string_literal: true

classe CreatePosts < ActiveRecord::Migration[6.0]

  def modifica

    create_table :posts do |t|

      t.string :title

    fine

  fine

fine
Applicazione web Ruby on Rails

Si dovrebbe notare che il db/migrazione è stata aggiunta automaticamente e schema.rb è stato creato dopo la migrazione. Attualmente la struttura del progetto è la seguente:

 albero
.
├── Gemfile
├── Gemfile.lock
├── README.md
├─── Rakefile
├── .gitignore
├── .env.example
├─── app
│ └── applicazione.rb
├─── db
│ ├── config.yml
│ ├── migrare
│ │ └── 20210504135128_create_posts.rb
│ └── schema.rb
└── docker-compose.yml

Record attivo

L'ultimo, ma non meno importante, passo per la creazione della nostra applicazione è l'aggiunta di record attivo e la sua configurazione. Per questo, dovremo aggiornare il nostro Gemfile con altre 3 gemme:

gemma "activerecord
gemma 'erb'
gemma 'yaml'

Perché aggiungiamo erb e ymal è spiegato di seguito nei commenti. L'intero record_attivo sarà nella cartella app/applicazione.rb file.

Esaminiamo gli eventi, uno per uno:

# frozen_string_literal: true

# Se vogliamo essere in grado di eseguire l'applicazione in ambienti diversi,
# ad esempio, test o produzione, è bene impostare il valore ENVIRONMENT
# all'inizio, che viene preso dalla variabile d'ambiente
# o `development` per impostazione predefinita.

ENV['AMBIENTE'] ||= 'sviluppo'

# Per usare le gemme aggiunte, dobbiamo caricarle usando il metodo Kernel#require,
# che carica il file o la libreria passata come parametro

richiedere 'pg'
richiedere 'active_record'
richiedere 'dotenv'
richiede 'yaml'
richiedere 'erb'

# Per impostazione predefinita, Dotenv.load per il caricamento delle variabili d'ambiente arriva a
# al file `.env`, quindi se si vogliono usare altri ambienti è opportuno
# estendere questo metodo al metodo seguente, che per prima cosa per un ambiente di sviluppo impostato
# cerca un file che termina con `.env.development.local`,
# poi `.env.development` e infine `.env`.

Dotenv.load(".env.#{ENV.fetch('ENVIRONMENT')}.local", ".env.#{ENV.fetch('ENVIRONMENT')}", '.env')

# Metodo necessario per caricare le impostazioni del database
def db_configuration
  # Il metodo sottostante restituisce il percorso del file con la nostra configurazione
  db_configuration_file_path = File.join(File.expand_path('..', __dir__), 'db', 'config.yml')

  # Avendo il percorso del file, possiamo leggerne i valori. Poiché il file config.yml
  # contiene variabili d'ambiente e, come avrete notato,
  # la sintassi erb , dobbiamo anche usare il gemma erb. Senza di essa,
  # i valori delle variabili non saranno letti correttamente e activerecord
  # non sarà in grado di connettersi a postgres.Il metodo seguente restituirà
  # la configurazione come stringa

  db_configuration_result = ERB.new(File.read(db_configuration_file_path)).result

  # Utilizzando la gemma `yaml` aggiunta in precedenza, possiamo caricare in modo sicuro la nostra configurazione

  YAML.safe_load(db_configuration_result, aliases: true)
fine

# Infine, dobbiamo creare una connessione tra activerecord e postgres
# utilizzando il metodo `establish_connection
ActiveRecord::Base.establish_connection(db_configuration[ENV['ENVIRONMENT']])

modulo Applicazione
  classe Error < StandardError; fine
  # Il vostro codice va qui...
fine

Abbiamo già le configurazioni, quindi possiamo aggiungere il modello Post nella nostra cartella rubino app. 

`├─── app`

`│ └── modelli`

`│ └── post.rb`
app/modelli/post.rb
# frozen_string_literal: true

classe Post < ActiveRecord::Base;end

e ricordarsi di caricare il file in applicazione.rb

richiedere 'app/modelli/post'

Inoltre, ricordarsi di aggiungere require 'app/runner' a app/applicazione.rb

Se vogliamo aggiungere nuovi file nella nostra applicazione, servizi, più modelli, dobbiamo caricarli in applicazione.rb.

SOMMARIO

Attualmente, la nostra applicazione ruby è pronta per continuare. Abbiamo configurato:

  • connessione al database,
  • Record attivo,
  • Migrazioni autonome con rake

Come si può vedere, non è sempre necessario utilizzare il metodo binari nuovi. In questo modo evitiamo di inserire nella nostra applicazione codice non necessario che non viene utilizzato. Abbiamo un maggiore controllo sullo sviluppo della nostra applicazione. Possiamo aggiungere altre librerie e logiche di business nel tempo. Possiamo usare un'applicazione così configurata per creare un crawler o uno scraper, connetterci ad API esterne da cui recuperare informazioni e memorizzarle nel nostro database o caricare file ed estrarre informazioni interessanti da essi. Vi auguro buona fortuna per l'ulteriore sviluppo delle vostre applicazioni!

BONUS

Anche la nostra applicazione deve essere avviata in qualche modo. Possiamo farlo in diversi modi, ad esempio dal terminale. Possiamo creare un file exe/app che caricherà la logica dell'applicazione dal file 'app/applicazione' ed eseguire la nostra applicazione attraverso il file Corridore aggiunto nella cartella delle applicazioni.

#!/usr/bin/env ruby
# frozen_string_literal: true

richiedere 'bundler/setup'

$LOAD_PATH.unshift File.expand_path('..', __dir__)
richiedere 'app/applicazione'

Runner.start
# frozen_string_literal: true

classe Runner
  def self.start
    mette 'Inizio'
  fine
fine
sviluppo di app in rubino

Ricordate anche di aggiungere richiedere 'app/runner' a app/applicazione.rb

Il codice è disponibile su GitHub:

– https://github.com/dwatek/simplerubinoapp

Per saperne di più

GraphQL Ruby. E le prestazioni?

Rotaie e altri mezzi di trasporto

Sviluppo di Rails con TMUX, Vim, Fzf + Ripgrep

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian