Kuna enamik Ruby on Rails'i fänne võib olla teadlik, on Rails 6 varsti tulemas ja toob kaasa palju oodatud funktsioone ja muudatusi. Selle artikli eesmärk on tutvustada teid Rails 6-le lisatud põhifunktsioonidega ja kirjeldada, kuidas need aitavad teie rakendusi paremaks muuta, säästes seega väärtuslikku arendusaega.
Alustuseks pidage meeles, et Rails 6 nõuab Ruby 2.5+ ja uuendatud andmebaase. Seega veenduge, et teil on plaan oma süsteeme vastavalt uuendada, juhul kui te pole seda juba teinud.
Mis on need uued funktsioonid? Siin on kiire ülevaade peamistest Rails 6 funktsioonidest, mida tõenäoliselt kasutate edasiliikumiseks:
Professionaalsena Ruby on Rails arendajad , eesmärk on tagada meie koodile maksimaalne katvus. Testimisest saab aga tüütu tegevus, kui meie testijuhtumid muutuvad „raskeks“ ja peame proovijuhtumite täideviimiseks ootama mitu minutit või isegi tunde.
Noh, Rails 6-l on siin vastus. See on lisanud parallelize
meetod ActiveSupport::TestCase
mis võimaldab teil testikomplekti paralleelselt muuta kahvliprotsessidega.
Niisiis, mida peate testide protsesside paralleelseks muutmiseks tegema, lisage see oma test_helper.rb
parallelize(workers: 2)
Teise võimalusena võime testide käivitamiseks asendada meie varem kasutatud käsud. Näiteks bin/rails test OR bin/rspec spec
saab nüüd asendada PARALLEL_WORKERS=15 rails test OR PARALLEL_WORKERS=15 rspec spec
.
Vastavalt sellele saate muuta testipakkide käitamise käske erinevatel CI-platvormidel, nagu Travis, Gitlab, CircleCI ja teised.
Iga protsessi loomisel / hävitamisel on ka konksud, mida saab kasutada järgmiselt:
class ActiveSupport::TestCase parallelize_setup do |worker| # setup databases end parallelize_teardown do |worker| # cleanup databases end parallelize(workers: :number_of_processors) end
Märge: Kui soovite rohkem teada saada, saate seda vaadata Rööbaste juhikud lisateabe saamiseks.
Kuna me rääkisime tõhusast testimisest, mõistkem ka seda, kuidas Rails 5 üks silmapaistvamaid omadusi Action Cable on paranenud. Nüüd on Action Cable'i võimalik testida mis tahes tasemel: ühendused , kanalid ja saated .
Ühenduskatsed eesmärk on kontrollida, kas ühenduse identifikaatorid määratakse õigesti või valed ühenduse taotlused lükatakse tagasi:
class ApplicationCable::ConnectionTest Kanalitestid saab kirjutada, et kontrollida, kas kasutajad saavad kanaleid tellida ja kanalil on voog:
class ChatChannelTest Ringhääling kanalitele saab testida järgmiselt:
# app/jobs/chat_relay_job.rb class ChatRelayJob Märge: Rohkem näpunäiteid testimise kohta leiate siin .
Hulgi sisestamine ja ülespoole lisamine
Mingil hetkel peame kõik sisestama mitu kirjet ühe korraga ja oleme seda tehes leidnud palju lahendusi. Noh, Rails 6 tuleb karbist välja uue meetodiga - insert_all
, sarnane update_all
-ga.
See ei käivita ühtegi tagasihelistamist ja täidab ühe SQL-päringu. On veel üks meetod upsert_all
mis võimaldab teil kasutada operatsioon ülespoole mida paljastavad paljud kaasaegsed andmebaasid nagu Postgres. Nii saate nüüd oma sisestuspäringuid vähendada ja koodi optimeerida. Jätke hüvasti ka varem kasutatud kalliskividega nagu activerecord-import
Üksik INSERT
SQL-päring valmistatakse ette nende meetodite abil ja andmebaasi saadetakse üks SQL-käsk, ilma et see mudeli käivitaks, või kutsuks välja Active Recordi tagasihelistamised ja valideerimised. Samuti on võimalik määratleda kriteeriumid, kui primaarvõti - unikaalsed indeksid või unikaalsed piirangud on rikutud - võimalus jätta päringud vahele või käivitada.
Mõned näited on allpool:
result = Article.insert_all( [ { id: 1, title: 'Handling 1M Requests Per Second', author: 'John', slug: '1m-req-per-second' }, #...snip... ], returning: %w[ id title ], unique_by: :index_articles_on_title_and_author ) result = Article.upsert_all( [ { id: 1, title: 'Handling 1M Requests Per Second', author: 'John', slug: '1m-req-per-second' }, { id: 1, .... }, # duplicate 'id' here { id: 2, .... }, { id: 3, .... }, # duplicate 'title' and 'author' here { id: 4, .... }, { id: 5, .... }, # duplicate 'slug' here { id: 6, .... } ] )
Meetodid insert
, insert!
ja upsert
on ümbrised insert_all
, insert_all!
ja upsert_all
Märge: Seal on väga hea artikkel, milles käsitletakse hulgipäringuid seoses erinevate andmebaasidega. Kui vajate lisateavet, veenduge kindlasti Vaata järgi .
Mitme andmebaasi vahetamine
Üks peamisi funktsioone, mida paljud suured rakendused hindavad, on see: Rails 6 on lõpuks lisanud teie rakenduse jaoks sisseehitatud ja kasutamiseks valmis andmebaaside toe mitmele andmebaasile!

Muidugi on kujunduse valik ikkagi teie, olenemata sellest, kas soovite jaotada oma rakenduse mitmeks mikroteenuseks, millel kõigil on eraldi andmebaas, või minna monoliitset teed või lisada oma rakendusele mitu loetud koopiat.
Kuid kui teil on võimalus seda nii lihtsalt teha, on potentsiaali säästa palju aja jooksul arengurindel.
Nii on teie uus database.yml
fail näeb välja:
development: primary: database: my_primary_db user: root primary_replica: database: my_primary_db user: ro_user replica: true animals: database: my_animals_db user: root animals_replica database: my_animals_db user: ro_user replica: true
Siin on huvitavad viisid, kuidas täpsustada, kuidas erinevatele andmebaasidele üle minna:
class AnimalsModel Siin on ametlik GitHubi leht , mis on ka kenasti dokumenteeritud. Isiklikult ootan, et ka tulevastes Railsi värskendustes oleks andmebaaside killustamisvõimalused (midagi sellist nagu seda ).
Toimingupostkast
Teine huvitav Rails 6 funktsioon on Toimingupostkast , mis lisab võimaluse marsruutige sissetulevaid e-kirju kontrollerile nagu postkastid Railsis töötlemiseks.
Action postkasti funktsioonid hõlmavad Mailgun, Mandrill, Postmark ja SendGrid sissetungi. Saate ka sissetulevaid e-kirju otse sisseehitatud Eximi, Postfixi ja Qmaili sissepääsude kaudu käsitleda. Nüüd võite tõenäoliselt ette kujutada võimalikke eeliseid ilma üksikasjalikumalt tutvumata. See võib olla otse e-kirjade töötlemine kasutajatoest kuni tugipiletite automatiseerimiseni - Rails 6 võimaldab klientidel otse e-posti teel vastata ja palju-palju muud. Põrand on teile avatud selle funktsiooni uurimiseks ja teie rakenduse jaoks ideaalse lähenemise väljatöötamiseks.
Siin on väike näide toiminguposti kasutamise mõistmiseks:
COMMENTS_REGEX = /^comment+(.+)@example.com/i # app/mailboxes/application_mailbox.rb class ApplicationMailbox :comments end # app/mailboxes/comments_mailbox.rb class CommentsMailbox Samuti on meilide konfigureerimise uus viis järgmine (võttes näiteks Sendgridi):
# config/environments/production.rb config.action_mailbox.ingress = :sendgrid
Kasutage rails credentials:edit
parooli lisamiseks rakenduse krüptitud mandaatidele jaotises action_mailbox.ingress_password
, kust Action Mailbox selle automaatselt leiab:
action_mailbox: ingress_password: …
Konfigureerige SendGrid sissetulev sõelumine sissetulevate meilide edastamiseks aadressile /rails/action_mailbox/sendgrid/inbound_emails
kasutajanimega actionmailbox
ja varem loodud parool. Kui teie rakendus elab https://example.com
, konfigureerite SendGrid järgmise URL-iga:
https://actionmailbox: [email protected] /rails/action_mailbox/sendgrid/i
Kui soovite seda lähemalt uurida, on Railsil selle kohta juba juhend olemas siin .
Zeitwerk
Zeitwerk on Ruby uus koodilaadija. Võttes arvesse tavapärast failistruktuuri, laadib Zeitwerk nõudmisel teie projekti klassid ja moodulid, mis tähendab, et teil pole vaja oma failide jaoks nõuda kõnesid. Selle lubamiseks rööbastes 6 saate teha järgmist.
config.autoloader = :zeitwerk
Lisateavet saate lugeda Zeitwerk siin .
Optimeerija näpunäited
Kas olete mures, et mõne teie päringu täitmine võtab liiga kaua aega? Noh, nüüd on teil võimalus oma päringute jaoks ka ajalõpu määrata.
Järgmine lause tõstatab StatementTimeout
erand, kui päringu täitmine võtab tavapärasest kauem aega:
User.optimizer_hints('MAX_EXECUTION_TIME(5000)').all
MySQL toetab seda ja peate uurima, kas teie andmebaas seda toetab.
Kärbi andmebaas
Aga külviandmed? Järgmine lause kärbib kõiki teie andmebaasitabeleid ja saate seejärel jätkata andmete külvamist:
rails db:truncate_all
Enam ei pea oma andmebaase kustutama. Tõenäoliselt nõustute, et see on elegantne ja kiire lahendus.
Toimingu tekst
Võib-olla on paljude WYSIWYG-redaktoritega mängivate rakenduste jaoks veel üks märkimisväärne omadus tugi lisamine Trixi toimetaja Rails 6 rakendustesse. See on kindlasti paljude projektide jaoks hea täiendus / täiendus.
Enamik WYSIWYG HTML-i redigeerijaid on tohutult ulatuslikud - iga brauseri juurutamisel on oma hulk vigu ja veidrusi ning vastuolude kõrvaldamiseks on jäetud JavaScripti arendajad. Trix jätab need vastuolud kõrvale, ravides contenteditable
sisend- / väljundseadmena: kui sisend jõuab redaktorini, teisendab Trix selle sisendi oma sisemise dokumendimudeli redigeerimistoiminguks, seejärel renderdab selle dokumendi uuesti redaktorisse. See annab Trixile täieliku kontrolli selle üle, mis juhtub pärast iga klahvivajutust.
Paigaldamine:
rails action_text:install # app/models/message.rb class Message Saate uurida Toimingu tekst üksikasjalikumalt ametlikus dokumendis, siin .
Turvalisus
Ükski tõsine uuendus pole täielik ilma mõne turvaparanduseta. Rööpad 6 ei reeda ka turva rindel. Esimene tähelepanuväärne turbevärskendus on toe lisamine Vastuvõtja autoriseerimine .
Host Authorization on uus vahevara, mille eest kaitsta DNS-i uuesti sidumine rünnakuid, lubades hostidele selgesõnaliselt päringu saata. See tähendab, et saate määratleda hostid, kellel on juurdepääs teie rakendustele.
Teine turbevärskendus on mõeldud rünnakute nurjamiseks, mis üritavad kopeerida küpsise allkirjastatud / krüpteeritud väärtust ja kasutada seda teise küpsise väärtusena. Seda tehakse, kleepides selleks väljale küpsise nime, mis seejärel allkirjastatakse / krüpteeritakse koos küpsise väärtusega. Seejärel kontrollime serveripoolsel lugemisel küpsiste nimesid ja viskame kõik rünnatud küpsised kõrvale. Luba action_dispatch.use_cookies_with_metadata
selle funktsiooni kasutamiseks, mis kirjutab küpsised koos uue eesmärgi ja aegumise metaandmetega.
Veebipakk vaikekomplektina
Nagu de-facto standard koos paljude kaasaegsete JavaScripti raamistikega esiotsa arendamiseks, on Rails 6 lisanud Webpackeri kui vaikepaketi JavaScripti komplektiks veebipakkuja pärli kaudu, asendades Rails Asset torujuhtme. See on suhteliselt sirgjooneline täiendus ja me ei hakka palju üksikasjalikumalt kirjeldama. Piisab öelda, et Webpack pakub ületöötanud esiotsa arendajatele mõningast kergendust.
Võistlustingimuste ennetamine
Rails 6-l on uus meetod, mida kasutatakse SELECT / INSERT võistlustingimuste vältimiseks meie koodis (olen kindel, et paljudel lugejatel on olnud projekti ebaõnnestumisel ebaõnn võistlustingimustega kokku puutuda). Siin on GitHubi niit kui vajate lisateavet.
Selle aluseks oleval tabelil peavad olema asjakohased veerud määratletud unikaalsete piirangutega. Ehkki väldime võistlustingimusi SELECT → INSERT from #find_or_create_by
vahel, on meil INSERT → SELECT vahel tegelikult veel üks võistlustingimus, mille võib käivitada, kui nende kahe lause vahelise DELETE käitab teine klient. Kuid enamiku rakenduste puhul on see tingimus, mida me tõenäoliselt vähem tabame.
Volikirjad rööbastel 6
Alates Rails 5.2 päevast on mandaadid nimetatud uueks rööpade viisiks tundliku teabe käsitlemiseks, lubades kurikuulsast lahti saada .env faile üks kord ja kõik. Mandaatide abil saab kolmanda osapoole teenuste krüpteeritud võtmeid kontrollida otse allika juhtimispuldist.
Siiani kasutas Rails aga kõigi keskkondade jaoks sama krüpteeritud faili, mis muutis arendamise ja tootmise erinevate võtmetega tegelemise pisut keeruliseks, eriti suurte projektide ja pärandkoodiga tegelemisel.
Rails 6-s on see lõpuks lahendatud keskkonnapõhiste mandaatide toel. Jällegi saab ametniku kohta uurida täiendavaid üksikasju GitHubi niit .
Kas Rails 6 on hea värskendus?
Jah, ja tegelikult võiks Rails 6-d kirjeldada kui suurt värskendust, kuigi vähesed nimetaksid seda mängude vahetajaks. Kuna Ruby on Rails on olnud aastaid olemas, ootavad vähesed inimesed revolutsioonilisi muudatusi, kuid selle kuues kehastus toob palju lauale.
Mõned Rails 6-s välja toodud funktsioonid tunduvad väikeste täiustustena, teistel on aga potentsiaal säästa palju arendusaega, parandada turvalisust, vastupidavust ja nii edasi. Alumine rida: rööpad on küpsed, paljud arendajad on selle tulevikust entusiastlikud ja Rails 6 väljaandmisega läks see veelgi paremaks.
Loomulikult pole see Rails 6 funktsioonide loetelu täielik ja muudatuste täieliku komplekti vaatamiseks peate tutvuma muudatuste logiga. Lisaks peate arvestama paljude amortisatsioonidega. Lõpuks, kui nõuate iga muudatuse läbimist ja värskendamist, lugege palun täielikud väljalaskemärkmed .
Põhitõdesid mõistes
Kas Ruby on Rails on 2019. aastal endiselt asjakohane?
Rööpad on asjakohasemad kui ükski teine lahendus turul. Rails ja Ruby mõlemad täiendavad (Matz muudab Ruby 3X kiiremaks). Rails 6 pakub lihtsaid tehnikaid rakenduse loomulikuks laiendamiseks. Ja see on endiselt paljude suurte mängijate, nagu Github, Shopify, Basecamp ja palju muud, usaldusväärne valik.
Kas ma peaksin kasutama rööpaid?
Vastus sõltub teie kasutusjuhtumist. See on endiselt parim raamistik tavalise veebi, e-kaubanduse, sisuhalduse ja paljude muude rakenduste jaoks. See vähendab ka MVP väljatöötamise aega ja on suurepärane valik, kui teil pole kindlat ideed või vajate rakenduse jaoks kiiret prototüüpi.
Mida tähendab Upsert?
Upsert on andmebaasitoiming, mis tähendab, et kui toimingu jaoks ette nähtud atribuutide põhjal on kirje andmebaasis juba olemas, siis soovime seda kirjet uuendada või luua uue kirje, kui kirjet pole olemas. Upsert toimub ühe tehinguna, vältides seega rakenduses kõiki võistlustingimusi.
Mis on paralleelse testimise eelised?
Oleme näinud projekte, kus testjuhtumite läbiviimine võtab tunde. Proovijuhtude komplekti käivitamine erinevates protsessides võimaldab meil vähendada testjuhtumite tööaega. Rails 6 paralleeltestimise korral ei pea me testijuhtumite paralleelseks muutmiseks tuginema välisteenustele.