Når vores webapplikation er defineret, og vi allerede ved, hvad vi har brug for at opnå, er det mange gange nødvendigt at opnå en form for datapersistens, det betyder at lagre de data, der er opnået af det et sted, og derefter bruge det, og det er det, der gør databasen motorer til os.
Da vi har brug for, at vores data forbliver i applikationerne, er det, når vi skal lede efter eller forstå, hvordan vi håndterer disse operationer, og selvom det kan lyde komplekst i dag, er der mange værktøjer, der letter vores arbejde, for eksempel er der ORM der giver os mulighed for at oprette strukturer, der er uafhængige af motoren, så vi næsten aldrig vil skrive en ren forespørgsel.
I tilfælde af Sinatra Der er flere perler, der allerede er ansvarlige for forbindelserne og administrationen af databaserne, så vi vil se, hvad de er, og hvordan vi kan integrere dem i vores applikation.
Vælg Database Engine
Det første trin, vi skal gøre, er at vælge den rigtige databasemotor til vores applikation, der er mange løsninger på markedet og hver med et andet formål, i tilfælde af Sinatra vil vi generelt bruge MySQL eller PostgreSQL i et produktionsmiljø, eller hvis det ikke lykkes SQLite i udviklingsmiljøer.
I tilfælde af denne vejledning valgte vi den sidste mulighed på grund af dens lette installation og den hastighed, hvormed vi kan begynde at arbejde.
Installation af SQLite
For at installere denne motor går vi først og fremmest til dens officielle websted og downloader pakken, der svarer til vores system, mange distributioner i Linux De leveres allerede med denne motor installeret og funktionel, så vi vil se, hvordan vi udfører denne proces i Windows.
På det forrige billede ser vi, at vi skal downloade de præ-kompilerede binære filer, når dette er gjort, skal vi pakke dem ud i en mappe kaldet SQLite i vores C: -drev, og vi tilføjer den mappe som en miljøvariabel i vores STI. Når ovenstående er gjort, når du skriver sqlite3 i vores konsol skulle vi se noget i retning af følgende.
Når dette trin er dækket, skal vi nu downloade den tilsvarende driver til Rubin, derfor skal vi i vores kommandokonsol skrive følgende:
perle installer sqlite3Dette skulle give os et resultat som følgende, der angiver, at installationen af perlen var vellykket for at oprette forbindelse til SQLite.
ORM
Da vi har vores database -motor, er det nu turen til at skaffe ORMDette er et værktøj, der giver os mulighed for at konvertere tabellerne i en database til objekter, på denne måde kan vi lettere arbejde med dem i vores applikation.
FordelDen største fordel ved ORM er, at det giver os mulighed for at være uafhængige af motoren, da vi ved ikke at skulle skrive SQL -kode direkte kan simpelthen ændre konfigurationen og foretage de tilsvarende migreringer.
Selvfølgelig er der mange muligheder at arbejde med Rubin og med Sinatramen en af de venligste at starte er DataMapper.
Installer DataMapper
Installation af dette ORM Det kunne ikke være enklere, og dette takket være det faktum, at det også er en perle, så vi er simpelthen nødt til at udføre et par instruktioner i vores konsol, den første er følgende, der hjælper os med at få basiskomponenten:
perle installer data_mapperDette skulle give et resultat svarende til følgende:
Nu hvor vi har basen, skal vi simpelthen installere driveren, så det DataMapper kan interagere med SQLite, til dette skal vi installere følgende perle:
gem installer dm-sqlite-adapterDette er det, der gør det muligt for vores applikationer at oprette tabeller og bruge databasen uden at skulle skrive SQL -kode. I slutningen skulle driverinstallationen give os følgende besked i vores konsol.
Opret forbindelse til en database
Da vi har afhængighederne installeret, er det, vi skal gøre nu, at fortsætte med at teste, hvordan vores nye data -persistens -miljø fungerer, til dette vil vi oprette en klasse. Denne klasse vil være grundlaget for at vi kan oprette et bord og gemme poster i det, dette giver os også mulighed for ikke at skulle skrive kode SQL direkte, så det i fremtiden vil være nok at ændre konfigurationen, når vi skal bruge en anden databasemotor.
I vores applikationsmappe skal vi oprette en fil kaldet sange.rb, hvad denne klasse skal gøre er at have kortet over, hvordan vi kan gemme en sang i databasen, lad os se indholdet og derefter forklare, hvad hver sektion af den gør:
kræver 'dm-core' kræver 'dm-migrations' DataMapper.setup (: default, "sqlite3: // # {Dir.pwd} /musica.db") klasse sange inkluderer DataMapper :: Ressource ejendom: id, Seriel ejendom: title, String property: duration, Integer property: release_date, Date end DataMapper.finalizeFørst og fremmest skal vi gøre det kræve af de vigtigste komponenter i DataMapper I dette tilfælde dm-kerne Y dm-migration. Derefter opretter vi en konfigurationslinje, der er den, der tillader os at bruge i første omgang SQLite for straks at oprette filen, i dette tilfælde musik.dbHvis filen allerede findes, betyder det, at databasen allerede findes, så forbindelsen ville simpelthen blive oprettet.
Vi laver endelig vores klasse sange som vil indeholde en række attributter, der identificerer det og inkluderingen af en anden klasse af DataMapper. Hermed er vi klar til den næste fase, som er at teste vores applikation. Da vi ikke har oprettet noget at se i vores browser, er det et godt tidspunkt at bruge Rubin interaktiv konsol (irb), som giver os mulighed for at kontrollere, at alt er på rette vej, udover at vi kan vænne os til DataMapper.
Prøv vores app
Først og fremmest i vores terminal eller konsol skal vi gå til den mappe, hvor vi har gemt vores fil sange.rb da dette er nøglen til at udvikle vores eksempel, når vi er der, skal vi starte vores interaktive konsol Rubin ved at skrive kommandoen:
irbNår vi starter det, kan vi gøre det kræve i vores klasse ved at placere kommandoen:
kræver "./sange"Dette skal vende tilbage sandt, hvis det lykkes, hvilket vi kan se i det følgende billede.
Næste handling skal vi bruge værktøjet auto_migrere af DataMapper, vil dette give os mulighed for at oprette tabellen med attributterne for vores klasse i den tilsvarende databasefil. Til dette skriver vi ganske enkelt følgende:
Sange.auto_migrere!Hvilket skaber den nødvendige struktur for at kunne gemme optegnelserne.
Opret vores første sang
Nu skal vi oprette det objekt, der giver os mulighed for at gemme de nødvendige værdier i databasen, for dette skal vi oprette et objekt kaldet sang:
sang = Sange.nyFor senere at gemme det med følgende kommando:
Dette giver os allerede en basisplatform til at inkludere oplysningerne i vores database, lad os se, hvad konsollen skal vise på dette tidspunkt:
Når dette er gjort, kan vi gemme dataene til det. Mens vi stadig er i vores konsol, vil vi tilføje attributterne til vores objekt en efter en, lad os se:
song.title = “Ny sang” song.duration = “315” song.release_date = Date.new (2010) song.saveHver af de foregående instruktioner lagrede i sangobjektet og udførte metoden Gemme alt dette er gemt i databasen. Vi ser i det følgende billede den proces, vi har udført.
Det bemærker vi også Rubin det er store og små bogstaver så vi skal være forsigtige med, hvordan vi skriver vores klasser, da der i konsolens tilfælde var en fejl, da vi skrev klassen Dato, siden Dato blev skrevet, som blev opdaget med det samme. Endelig, hvis vi vil konsultere de gemte sange, er det nok at skrive følgende instruktion:
Sange. AlleVi kan også redegøre for, hvor mange poster vi har med følgende.
Sange. OptællingFor at afslutte, lad os se svaret modtaget i vores konsol, når vi udfører disse to kommandoer.
Vi har indsat vores første rekord og har konsulteret den med succes, og dermed lært at bruge databasen med Sinatra, selvom den mest observante måske har indset, at alt, hvad vi gjorde, var i Rubin, og dette var den gode idé, for at demonstrere hvordan vidende Rubin vi kan arbejde med Sinatra uden at have mange komplikationer.