Volt je Rubyjev okvir, namenjen aplikacijam, bogatim s podatki. Tako na strežniški kot na odjemalski strani sta napisani v Rubyju (ki se nato prevede v JS z uporabo OPAL-a), zato razvijalec omogoča pisanje zelo dinamičnih aplikacij, ne da bi mu bilo treba napisati eno vrstico kode Javascript. Če ste Rubin ventilator kot meni, vam bo všeč ta okvir.
V poskusu, da bi spletne aplikacije postale veliko bolj dinamične, so Javascriptovi okviri, kot so Angular.js, Backbone.js in Ember.js, pridobili veliko popularnost. Vendar ti okviri pogosto zahtevajo, da je uporabna zaledna aplikacija, zato se uporabljajo skupaj s spletnimi okviri, kot sta Ruby on Rails in Django.
Po drugi strani pa je Ruby framework Volt sposoben upravljati back-end in dinamični front-end. Ker sta obe funkcionalnosti tesno integrirani v njegovo jedro (pravzaprav je Volt bolj podoben arhitekturi MVVM, ki izkorišča prednosti vezav podatkov), razvijalcu omogoča hitro izdelavo teh aplikacij.
Zelo kul funkcija, ki pride iz škatle, je Voltova funkcija v realnem času. Če ste kdaj izdelovali aplikacije v realnem času, veste, da je postopek lahko zahteven - verjetno ste izvedli anketiranje AJAX, spletne vtičnice, strežniške dogodke (SSE) ali celo uporabili zunanje storitve, dodali zapletenost aplikaciji in celo povzročili dodatne stroške . V nasprotju z drugimi ogrodji Volt ohranja povezavo s strežnikom (prek spletnih vtičnic), zato namesto da Ajax zahteva za vsako dejanje, spremembe takoj pošlje vsem strankam. Za to ni potrebna nobena konfiguracija.
V tej vadnici Ruby framework vas bom popeljal skozi postopek ustvarjanja aplikacije v realnem času z uporabo Volta in še boljši način kot aplikacija za klepet, da dokažem svoje zmogljivosti, saj klepet ostaja največji primer uporabe aplikacij v realnem času.
Najprej namestimo Volt in MongoDB. Slednji postopek ne bo podrobneje zajet:
gem install volt brew install mongodb
mkdir -p /data/db
(ustvari dbpath)
chown `id -u` /data/db (change the owner to have the proper dbpath permissions)
Zdaj smo pripravljeni ustvariti svojo prvo aplikacijo, recimo ji 'klepet'. To lahko enostavno naredimo v nekaj vrsticah:
volt new chat cd chat
Struktura dokumenta ima nekaj podobnosti z Rails. Glavna razlika, ki jo bodo opazili uporabniki storitve Rails, je ta, da imamo v aplikaciji dodatno mapo, ki vsebuje ostale mape, kot so sredstva, krmilniki, modeli in pogledi, ta dodatna mapa pa je 'Komponenta'.
Komponenta je ločen odsek aplikacije. Vse strani znotraj komponente se upodobijo brez ponovnega nalaganja strani, saj so vse datoteke za to komponento naložene z začetno zahtevo http, tako da, če obiščemo stran druge komponente, bo narejena nova zahteva http in stran bo znova naložena '. V tem primeru uporabimo privzeto komponento, imenovano 'main'.
Zaženimo strežnik z izvajanjem ukaza ‘volt server’ v konzoli in si oglejte, kako izgleda v brskalniku, tako da se pomaknete na localhost: 3000:
volt server
Prav tako ne pozabite zagnati MongoDB v konzoli:
mongod
Opazimo, da Volt prihaja s številnimi privzetimi stranmi, vključno z „Domov“ in „Vizitka“. Te je mogoče prilagoditi takoj.
Druga stvar, ki jo je treba omeniti, je gumb za prijavo v zgornjem desnem kotu strani. Volt ima v ogrodje integrirano 'uporabniško' funkcionalnost prek dragulja 'volt-user-templates', ki omogoča neposredno registracijo in preverjanje pristnosti uporabnikov.
Zdaj začnimo delati na naši aplikaciji. Najprej ne potrebujemo strani »Vizitka«, da lahko nadaljujemo in izbrišemo naslednje: app/main/views/main/about.html
datoteko, približno dejanje v app/main/controllers/main_controller.rb
, odstranite /about
pot v app/main/config/routes.rb
in navigacijska povezava v app/main/views/main/main.html
.
Zdaj pa se lotimo posla in začnimo z naštevanjem vseh registriranih uporabnikov:
{{ if Volt.user }} { } {{ if user._id != Volt.user._id }} {{user._name}} {{ end }} {{ end }} {{ if params._user_id }} { current_conversation.each do } {{ message._text }}
{{ end }} {{ if current_conversation.count == 0 }} You have no messages yet. Start chatting!
{{ else }} {{ end }} Submit {{ end }} {{ else }} This is a sample application built with Volt to demonstrate its real-time capabilities. Please log in to access it.
{{ end }}
Najprej preverimo, ali je pred prikazom obrazca izbran uporabnik, nato prikažemo vsa sporočila iz trenutnega pogovora (pogovor z izbranim uporabnikom) iz metode v krmilniku, ki jo bomo določili v bit, in na dnu prikazujemo obrazec za pošiljanje novih sporočil.
Upoštevajte, da je vrednost vnosa atribut, ki ga ustvarjamo v modelu zbirke strani, saj ne želimo, da se shrani v shrambo podatkov. Zdaj pa določimo current_conversation
in send_message
metode v krmilniku:
def send_message unless page._new_message.strip.empty? _messages <[{ sender_id: Volt.user._id, receiver_id: params._user_id }, { sender_id: params._user_id, receiver_id: Volt.user._id }] }) end
V metodi send_message v zbirko dodamo novo sporočilo, če sporočilo ni prazno (preverjamo v vrstici, da se trenutno ne bi morali motati s preverjanji), nato nastavimo stran ._new_message to ‘’
tako izpraznimo vnosno polje.
To vrstico bomo morda želeli dodati na konec select_conversation
metoda. Trenutna metoda pogovora samo poizveduje _messages
zbirka sporočil med izbranim uporabnikom in trenutnim uporabnikom.
Za konec bi rad imel nekakšen sistem obveščanja, da bi uporabniki lahko videli, kdaj jim drugi uporabniki pošiljajo sporočila.
Dodajmo novo zbirko z imenom _notifications
in ustvarite novo po vsakem poslanem sporočilu:
def send_message unless page._new_message.strip.empty? _messages << { sender_id: Volt.user._id, receiver_id: params._user_id, text: page._new_message } _notifications << { sender_id: Volt.user._id, receiver_id: params._user_id } page._new_message = '' end end def select_conversation(user) params._user_id = user._id unread_notifications_from(user).then do |results| results.each do |notification| _notifications.delete(notification) end end page._new_message = '' end def unread_notifications_from(user) _notifications.find({ sender_id: user._id, receiver_id: Volt.user._id }) end
Prav tako moramo izbrisati obvestila po tem, ko uporabnik izbere pogovor in vidi nova sporočila, zato sem ta del dodal v select_conversation
metoda.
Dodajmo števec obvestil tik ob uporabniškem imenu:
{{user._name}} {{ if unread_notifications_from(user).count > 0 }} {{ unread_notifications_from(user).count }} {{ end }}
Zdaj je aplikacija pripravljena, lahko odprete nekaj brskalnikov in začnete preizkušati realnočasovne zmožnosti Volta.
Čeprav Voltov okvir ni tako zrel in robusten kot večina priljubljenih Rubyjevih okvirov, ki obstajajo že leta (v trenutku, ko je Volt še vedno v beta različici), je vredno razmisliti in preučiti.
V primeru, da vas zanima, uporabite to vadnico v okviru Rubyja, da Volta odpeljete. Bodite pozorni na nadaljnji razvoj, saj je Volt že v tej zgodnji fazi razvoja videti kot zelo obetaven Rubyjev okvir.
V pripravi je veliko novih funkcij in prepričan sem, da bo Volt v naslednjih nekaj letih postal bolj aktualen, ko bo več ljudi začelo eksperimentirati z njim. Zaradi številnih inovativnih funkcij bi se lahko mnogi razvijalci zaljubili v Volta in ga uporabili za naslednjega Ruby projekt .