Una nuova versione di Rails è proprio dietro l'angolo. Al momento non è confermata una data di uscita, ma dovrebbe essere disponibile prima di Natale. Al momento della pubblicazione di questo post, la versione più recente è 7.0.0.rc1. EHI, Github, Shopify e Campo base tutti eseguono Rails 7 alpha in produzione, quindi possiamo aspettarci che anche la release candidate sia stabile.
Il nostro obiettivo in questo post è quello di esaminare alcune delle nuove funzionalità e modifiche che Rails 7 porterà.
C'è qualcosa di nuovo in Ruby on Rails 7?
Ci sono alcune funzionalità straordinarie ed entusiasmanti nell'ultima versione di Ruby on Rails. Secondo il creatore di Rails David Hansson, questa versione include tutto ciò di cui gli sviluppatori hanno bisogno per creare un'applicazione web moderna. Secondo Hanson, questa versione è il culmine di molti anni di progressi in cinque diverse aree contemporaneamente. Diamo un'occhiata a cosa ha da offrire Ruby on Rails 7
1. Non è necessario Webpack o Node.
Non è necessario che gli sviluppatori dispongano di Webpack e Nodejs per utilizzare i pacchetti npm. Sarebbero necessari molti passaggi per tradurre ES6 e Babel e quindi raggrupparli. Webpacker gem può essere utilizzato per questo compito, ma comportava un bagaglio aggiuntivo ed era difficile da modificare.
Il gem importmaps-rails ora consente agli sviluppatori di importare mappe. Per aggiornare, aggiungere o sbloccare le dipendenze, puoi utilizzare ./bin/importmap invece di scrivere il codice per package.json.
Ad esempio, per installare date-fns:
$ ./bin/importmap pin data-fns
Ciò includerà automaticamente una riga in config/importmap.rb come:
in “date-fns”, a: “https://ga.jspm.io/npm:[email protected]/esm/index.js”
E, nel tuo Javascript, continui a scrivere codici come facevi prima.
importa { formatDistance, subDays } da 'date-fns'
formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
//=> “3 giorni fa”
Quando lavori con questa struttura, devi tenerlo presente perché ciò che scrivi non traspare in ciò che percepisce il browser. Poiché la maggior parte dei browser ora supporta ES6, questo non è un problema. La trasformazione in JS è richiesta solo per JSK e Typescript.
Ad esempio, gli sviluppatori devono utilizzare webpack, esbuild e rollup se desiderano utilizzare React con JSX.
Questo può essere fatto rapidamente con Rail 7. Con una qualsiasi delle strategie scelte, esegui semplicemente il seguente comando:
$ ./bin/rails javascript:install:[esbuild|rollup|webpack]
2. Un livello di database crittografato
Con Rail 7, gli sviluppatori possono crittografare determinati campi del database utilizzando il metodo encrypts su ActiveRecord::Base. È necessario scrivere il seguente codice dopo aver impostato la configurazione iniziale:
messaggio di classe < ApplicationRecord
crittografa:testo
FINE
Non c'è differenza tra attributi crittografati e altri attributi. Il framework Rails 7 crittografa e decrittografa automaticamente il tuo database e la tua applicazione.
Tuttavia, se passi l'opzione deterministic: true al metodo encrypts, non puoi eseguire query sul database del campo. Di conseguenza, il modello deterministico è meno sicuro rispetto ad altre modalità, quindi viene generalmente utilizzato solo in caso di emergenza.
3. Interrogazione asincrona
Il metodo load_async è ora disponibile per gli sviluppatori durante l'esecuzione di query sui dati. Quando vengono poste più query insieme, si risparmia tempo. È possibile eseguire quanto segue utilizzando questo:
def PostController
indice def
@posts = Post.load_async
@categorie = Categoria.load_async
FINE
FINE
Verranno attivate due query contemporaneamente. In altre parole, se ciascuna query impiegasse 200 ms, il tempo totale per recuperare due risultati sarebbe di 200 ms anziché 400 ms.
4. Sarebbe possibile eseguire le applicazioni solo in modalità Zeitwerk.
La modalità Zeitwerk di Rail 7 sarà ora disponibile per tutte le applicazioni. La direzione ha assicurato che questa trasformazione sarà agevole per gli sviluppatori. Caricatore di codice Ruby on Rails Zeitwerk. Consente agli sviluppatori di caricare facilmente moduli e classi dal tuo progetto.
Viene utilizzato per avviare dipendenze gem, progetti, applicazioni, ecc. Inflector, configurazioni e logger sono tutti univoci per ciascun caricatore. L'unica differenza tra la modalità Zeitwerk e quella Classica è che fornisce una migliore strategia di caricamento.
5. Ora Stimulus e Turbolink stanno sostituendo UJS e Turbolink
Le applicazioni Rails 7 ora vengono fornite con Stimulus e Turbo (da Hotwire) per impostazione predefinita. In Hotwire, l'HTML viene inviato via cavo anziché JSON, consentendo agli sviluppatori di creare applicazioni Web con JavaScript minimo.
Di conseguenza, le pagine si caricano rapidamente, i modelli vengono eseguiti contemporaneamente sul server e gli sviluppatori possono vivere un'esperienza di sviluppo produttiva. Con Turbo puoi velocizzare i cambi di pagina, semplificare le pagine complesse in componenti e trasmettere in streaming gli aggiornamenti tramite WebSocket.
Hotwire e Turbo sono entrambe tecnologie ibride; possono essere integrati nei dispositivi iOS e Android. In combinazione con Turbo, Stimulus fornisce una soluzione per creare applicazioni veloci e accattivanti.
6. Utilizza sole per incorporare la tua query con un singolo record
Quando si afferma che una query corrisponde a un singolo record, gli sviluppatori ora possono utilizzare first o find_by invece di sole o find_sole_by.
Prodotto.where(["prezzo = %?", prezzo]).sole
# => ActiveRecord::RecordNotFound (se nessun prodotto con il prezzo indicato)
# => # (se un prodotto con il prezzo indicato)
# => ActiveRecord::SoleRecordExceeded (se più di un prodotto con un determinato prezzo)
user.api_keys.find_sole_by(chiave: chiave)
# come sopra
7. I file generati dal flusso possono essere gestiti dalle azioni del controller.
Utilizzando send_stream all'interno di un'azione del controller, Rail su Ruby 7 semplifica i file generati al volo.
send_stream(nome file: “subscribers.csv”) do |stream|
stream.write "indirizzo_e-mail,updated_at\n"
@subscribers.find_each fa |subscriber|
stream.write "#{subscriber.email_address},#{subscriber.updated_at}\n"
FINE
FINE
Quando vengono distribuiti su Heroku, gli sviluppatori riceveranno una risposta immediata/parziale in modo che sappiano che sta succedendo qualcosa.
8. Varianti con nomi
Ruby on Rails 7 supporta le varianti di denominazione utilizzando ActiveStorage.
Conclusioni
Nelle note di rilascio di Rails 7, puoi trovare l'elenco completo di correzioni di bug, funzionalità e modifiche. Al momento non sono completi, ma verranno aggiornati presto.
Tieni presente che Rails 6.1 non riceverà più correzioni di bug se stai ancora utilizzando Rails 6 o versioni precedenti con la versione finale di Rails 7. Anche l'EOL per Rails 5.2 segnerà la fine del supporto, poiché non riceverà più alcun aggiornamento.
divertiti a programmare! Contatto RailsCarma per maggiori informazioni!