Lihtne Ruby rakendus algusest peale koos Active Recordiga
Damian Watroba
Software Engineer
MVC on disainimudel, mis jagab rakenduse vastutusalad, et muuta liikumine lihtsamaks. Rails järgib seda disainimustrit kokkuleppeliselt.
Mulle meeldib töötada koos Rööpad sest ma saan lihtsalt ja kiiresti luua toimiva rakenduse ja näidata seda maailmale või ainult oma sõpradele. Siiski on olemas rakenduste tüübid, mis ei vaja nii suurt raamistikku kui Rööpad ja kõik selle funktsioonid.
Võib juhtuda, et meie rakendus vajab kogu MVC mustrist ainult M (Model). Mudel-kontroller. Kas tasub alustada projekt aadressil Rööpad kui me teame, et V-C (View-Controller) osa ei ole vaja?
On hea teada, et Aktiivne rekord , Active Model, Action Pack ja Action View, mis vastutavad MVC eest, saab kasutada iseseisvalt väljaspool Rööpad. See võimaldab meil luua lihtsa Ruby rakendus millel on andmebaasiühendus ja arendada seda ilma tarbetu kood ja raamatukogud, mille me saaksime paketis, kui käivitaksime käsu rails new.
Olen kirjeldanud samm-sammult, kuidas seda saavutada, ja kogu koodi leiate GitHubist. Link on selle artikli lõpus.
Struktuur
Meie projekti alustamiseks ei ole meil palju vaja. Alustame loomisest Gemfile kus me lisame rakenduses töötamiseks vajalikud pärlid koos versiooniga Ruby mida me kasutame.
Vabatahtlik README.md faili eesmärk on kirjeldada, kuidas meie rakendus töötab ja kuidas selle kallal edasi töötada, nii meile endile kui ka teistele arendajatele, kes tahavad tulevikus koos meiega projekti arendada.
cat README.md
# rakendus
TO DO: Kustuta see ja ülaltoodud tekst ning kirjelda oma rakendust.
app kataloogi application.rb faili, mis vastutab meie rakendusse lisatavate raamatukogude ja failide konfigureerimise ja laadimise eest. Ärge unustage käivitada komplekti paigaldamine genereerida Gemfile.lock. Meie rakenduse struktuur peaks selles etapis välja nägema selline:
Kui selline struktuur on valmis, saame kaaluda, millise andmebaasi mootori valida ja konfigureerida. Selle artikli jaoks valisin PostgresQL, millega mul on kõige rohkem kogemusi. See võib olla ka MySQL või SQlite3 või mõni muu mootor, mis töötab koos Aktiivne rekord. Tehnoloogia valikul on hea juhinduda rakenduse eesmärgist, milleks seda kasutatakse ja mis on selle eesmärk.
Kiireks ja lihtsaks andmebaasi konfigureerimiseks kasutasin dockerit ja docker-compose'i. Ma ei taha nende tööriistade konfigureerimist, nende plusse ja miinuseid lähemalt kirjeldada, kuid kui te pole kunagi varem dockerit kasutanud, siis viitan teile ametliku dokumentatsiooni jaoks Docker ja Docker Compose lisateabe saamiseks.
# app/application.rb
require 'pg'
moodul Application
class Error < StandardError; end
# Teie kood läheb siia...
end
Iseseisvad migratsioonid, Rake
Järgmine samm meie rakenduse konfigureerimisel on lisada rakendusele standalone_migrations ja rake gems, mis võimaldab meil hallata meie migratsiooni nagu Railsis ja saada ligipääsu rake db: käskudele.
Ajakohastamine Gemfile vajalike kalliskividega ja teha komplekti paigaldamine
# kalliskivi, mida kasutatakse mitte-rööbaste ja mitte-rubiini rakendustes.
gem 'standalone_migrations'
# standalone_migrations vajab rake'i, et oleks võimalik luua migratsioone ja käivitada neid, nagu Railsis.
gem 'rake'
# Gem on vajalik keskkonnamuutujate laadimiseks.
gem 'dotenv'
Lisame Rakefile meie projekti juurkataloogi, kuhu me laadime dotenv ja standalone_migrations mida me lisasime varem
Koos Rakefile selliselt konfigureerituna saame kontrollida, kas meie rake töötab, kasutades rake -T käsk, mis peaks tagastama nimekirja meie rakenduses saadaval olevatest käskudest.
Enne rake db:create, meil peab olema projektis ikkagi konfiguratsioonifail, et luua ühendus Postgres'i instantsiga. Selleks peame looma db kataloogi koos db config.yml faili, mis peaks välja nägema nagu allpool:
Nagu näete, kasutasin keskkonnamuutujaid, et konfigureerida ühendus meie Postgresiga, kus me hoiame tundlikke andmeid, mis ei tohiks olla repositooriumis. Selleks kasutasin eelnevalt lisatud gem dotenv, mis lisati ka Rakefile koos standalone_migrations. Kui me kasutame oma rakenduse versioonihalduse haldamiseks Git'i, siis meenutame, et peame lisama faili .gitignore faili, kus me lülitame välja võimaluse jälgida .env faili meie projektist.
# .gitignore
.env*
!.env.example
ja lisada.env fail, mis sisaldab õigesti konfigureeritud ENV
Selles etapis peaksime olema võimelised käivitama rake db:create käsk, mis loob andmebaasi
Proovime lisada uue rände kaudu rake db:new_migration name=, kus me loome postitused tabel koos :title veerg
# frozen_string_literal: true
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.string :title
end
end
end
Te peaksite märkama, et db/migreerima kataloog lisati automaatselt ja schema.rb loodi pärast edukat migratsiooni. Praegu näeb meie projekti struktuur välja järgmiselt:
Viimane, kuid mitte vähem tähtis samm meie rakenduse loomisel on lisada activerecord ja selle konfiguratsioon. Selleks peame uuendama oma Gemfile'i veel 3 pärliga:
pärl 'activerecord'
gem 'erb'
gem 'yaml'
Miks me lisame erb ja ymal selgitatakse allpool kommentaarides. Kogu active_record konfiguratsioon on app/application.rb faili.
Käime siin toimuva ükshaaval läbi:
# frozen_string_literal: true
# Kui soovime, et rakendust saaks käivitada erinevates keskkondades,
# nt test- või tootmisrakenduses, on hea määrata väärtus ENVIRONMENT.
# alguses, mis võetakse keskkonnamuutujast
# või `development` vaikimisi.
ENV['ENVIRONMENT'] ||= 'development'.
# Lisatud pärlite kasutamiseks tuleb need laadida, kasutades meetodit Kernel#require,
#, mis laeb parameetrina edastatud faili või raamatukogu.
require 'pg'
require 'active_record'
require 'dotenv'
require 'yaml'
require 'erb'
# Vaikimisi jõuab Dotenv.load keskkonnamuutujate laadimiseks välja
# faili `.env`, nii et kui me tahame kasutada teisi keskkondi, siis tasub
# laiendada seda alljärgnevale meetodile, mis kõigepealt komplekti arendamiseks
# keskkonda otsib faili, mis lõpeb `.env.development.local`,
# seejärel `.env.development` ja lõpuks `.env`.
Dotenv.load(".env.#{ENV.fetch('ENVIRONMENT')}.local", ".env.#{ENV.fetch('ENVIRONMENT')}", '.env')
# Andmebaasi seadete laadimiseks vajalik meetod
def db_configuration
# Alljärgnev meetod tagastab meie konfiguratsiooni sisaldava faili tee.
db_configuration_file_path = File.join(File.expand_path('..', __dir__), 'db', 'config.yml')
# Võttes faili tee, saame lugeda selle väärtusi. Kuna config.yml
# fail sisaldab keskkonnamuutujaid ja, nagu te ehk olete märganud,
# erb süntaksi, peame kasutama ka erb gemi. Ilma selleta,
# ei loe muutujate väärtusi õigesti ja activerecord
# ei suuda postgresiga ühendust luua. järgmine meetod tagastab
# konfiguratsiooni stringina
db_configuration_result = ERB.new(File.read(db_configuration_file_path)).result
# Kasutades eelnevalt lisatud `yaml` gemi, saame turvaliselt laadida meie konfiguratsiooni
YAML.safe_load(db_configuration_result, aliases: true)
end
# Lõpuks peame looma ühenduse activerecordi ja postgres'i vahel
# kasutades meetodit `establish_connection`.
ActiveRecord::Base.establish_connection(db_configuration[ENV['ENVIRONMENT']])
moodul Application
class Error < StandardError; end
# Sinu kood läheb siia...
end
Meil on konfiguratsioonid juba olemas, seega saame lisada Posti mudeli meie rubiin app.
`˛├── äpp`
`│ └─ └─ mudelid`
`│ └─ post.rb`
app/models/post.rb
# frozen_string_literal: true
class Post < ActiveRecord::Base;end
ja ärge unustage laadida faili application.rb
nõuda 'app/models/post'
Samuti ärge unustage lisada nõuda 'app/runner' aadressile app/application.rb
Kui me tahame lisada oma rakendusse uusi faile, teenuseid, rohkem mudeleid, peame need laadima sisse application.rb.
KOKKUVÕTE
Praegu on meie rubiinirakendus valmis jätkama. Oleme seadistanud:
andmebaasiühendus,
Aktiivne rekord,
Iseseisvad migratsioonid koos rake'iga
Nagu näete, ei ole alati vaja kasutada rööpad uued. Nii väldime oma rakenduses tarbetut koodi, mida ei kasutata. Meil on rohkem kontrolli meie rakenduse arendamise üle. Me saame aja jooksul lisada rohkem raamatukogusid ja äriloogikat. Me võime kasutada sellist konfigureeritud rakendust, et luua crawler või scraper, luua ühendus välise API-ga, kust me saame teavet ja salvestada oma andmebaasi või laadida faile ja võtta neist huvipakkuvat teavet. Soovin teile edu oma rakenduste edasisel arendamisel!
BONUS
Meie rakendus tuleb ka kuidagi käivitada. Seda saame teha mitmel viisil, näiteks terminalist. Me võime luua exe/rakendus faili, mis laadib meie rakendusloogika 'app/application' faili ja käivitada meie rakendus läbi Jooksja teenus on lisatud rakenduste kataloogi.