Volt on Ruby raamistik, mis on loodud andmerikaste rakenduste jaoks. Nii serveri kui ka kliendi pool on kirjutatud rubiinis (mis seejärel kompileeritakse OPS-i kasutades JS-i), nii et see võimaldab arendajal kirjutada väga dünaamilisi rakendusi, ilma et peaks kirjutama ühtegi Javascripti koodi rida. Kui olete Rubiinifänn nagu mina, meeldib teile see raamistik.
Püüdes muuta veebirakendusi palju dünaamilisemaks, on Javascripti raamistikud nagu Angular.js, Backbone.js ja Ember.js palju populaarsust kogunud. Kuid need raamistikud nõuavad sageli tagarakenduse kasutamist, nii et neid kasutatakse koos veebiraamistikega nagu Ruby on Rails ja Django.
Teisest küljest on Ruby framework Volt võimeline haldama taguotsi ja dünaamilist esiotsa. Kuna mõlemad funktsioonid on selle tuumaga tihedalt integreeritud (tegelikult sarnaneb Volt pigem MVVM-i arhitektuuriga, kasutades andmete sidumise eeliseid), võimaldab see arendajal neid rakendusi kiiresti üles ehitada.
Väga lahe funktsioon, mis karbist välja tuleb, on Volti reaalajas funktsioon. Kui olete kunagi reaalajas rakendusi loonud, teate, et protsess võib olla keeruline - olete tõenäoliselt rakendanud AJAX-küsitlust, veebipesasid, serveriga saadetud sündmusi (SSE) või isegi kasutanud väliseid teenuseid, lisades rakendusele keerukust ja tekitades isegi lisakulusid . Erinevalt teistest raamistikest hoiab Volt ühendust serveriga elus (veebipesade kaudu), nii et Ajaxi iga toimingu taotluste esitamise asemel ajab see muudatused koheselt kõigile klientidele. Selle toimimiseks pole vaja konfiguratsiooni.
Selles Ruby-raamistiku õpetuses juhatan teid läbi reaalajas rakenduse loomise, kasutades Volti, ja mis on parem viis kui vestlusrakendus oma võimete demonstreerimiseks, kuna vestlus jääb reaalajas rakenduste esmakordseks kasutamiseks.
Kõigepealt installime Volt ja MongoDB. Viimast protsessi ei käsitleta üksikasjalikult:
gem install volt brew install mongodb
mkdir -p /data/db
(loo dbpath)
kuidas mõõta nõudluse hinnaelastsust
chown `id -u` /data/db (change the owner to have the proper dbpath permissions)
Nüüd oleme valmis looma oma esimese rakenduse, nimetame seda vestluseks. Saame seda hõlpsalt teha paari reaga:
volt new chat cd chat
Dokumendi struktuuril on mõningaid sarnasusi Railsiga. Peamine erinevus, mida Rails'i kasutajad märkavad, on see, et meil on rakenduses täiendav kaust, mis sisaldab ülejäänud kaustu, näiteks varasid, kontrollereid, mudeleid ja vaateid. See lisakaust on komponent.
Komponent on rakenduse eraldatud osa. Kõik komponendi sees olevad lehed renderdatakse lehte uuesti laadimata, kuna kõik selle komponendi failid laaditakse esialgse http-päringuga, nii et kui külastame mõne muu komponendi lehte, tehakse uus http-päring ja leht laaditakse uuesti '. Selle näite jaoks kasutagem vaikekomponenti nimega “main”.
scorp vs c corp vs llc
Alustame serverit, käivitades konsoolis käsu 'volt server', ja vaadake, kuidas see brauseris välja näeb, navigeerides saidile localhost: 3000:
volt server
Ärge unustage ka MongoDB käivitamist konsoolis:
mongod
Võime märgata, et Voltiga on kaasas mitu vaikelehte, sealhulgas ‘Kodu’ ja ‘Teave’. Neid saab kohe kohandada.
Teine mainimist väärt asi on sisselogimisnupp lehe paremas ülanurgas. Voltil on raami „volt-user-templates” pärli kaudu integreeritud „kasutaja” funktsionaalsus, mis pakub võimalust kasutajate registreerimiseks ja autentimiseks kohe kastist väljas.
Alustame nüüd oma rakenduse kallal töötamist. Esiteks pole meil vaja lehte „Teave”, et saaksime jätkata ja kustutada järgmise: app/main/views/main/about.html
faili, umbes toimingu kohta app/main/controllers/main_controller.rb
, eemaldage /about
marsruut app/main/config/routes.rb
ja nav link app/main/views/main/main.html
.
Alustame nüüd asjaga ja alustame kõigi registreeritud kasutajate loetlemisega:
{{ 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 }}
Esiteks kontrollime, kas enne vormi kuvamist on valitud mõni kasutaja, seejärel kuvame kõik praeguse vestluse (vestlus valitud kasutajaga) sõnumid kontrolleri meetodist, mille määratleme natuke, ja allosas kuvame uute sõnumite saatmise vormi.
Pange tähele, et sisendi väärtus on atribuut, mida loome lehekogumismudelis, kuna me ei soovi, et see salvestataks andmekogusse. Nüüd määratleme current_conversation
ja send_message
kontrolleri meetodid:
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
Meetodis send_message lisame kollektsiooni uue sõnumi, kui kiri pole tühi (kontrollime teksti sees, et me ei peaks praegu valideerimisega jamama), siis määrame lehe ._new_message to ‘’
nii tühjendame sisendvälja.
Võiksime lisada selle rea select_conversation
lõppu meetod samuti. Praegune vestlusmeetod esitab lihtsalt päringu _messages
valitud kasutaja ja praeguse kasutaja vaheliste sõnumite kogu.
Lõpetuseks sooviksin mingit teatamissüsteemi, et kasutajad saaksid näha, kui teised kasutajad neile sõnumeid edastavad.
Lisame uue kogu nimega _notifications
ja loo pärast iga sõnumi saatmist uus:
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
Samuti peame kustutama märguanded pärast seda, kui kasutaja valib vestluse ja näeb uusi kirju, nii et lisasin selle osa select_conversation
meetod.
Lisame märguandeloendi kohe kasutajanime juurde:
{{user._name}} {{ if unread_notifications_from(user).count > 0 }} {{ unread_notifications_from(user).count }} {{ end }}
Nüüd on rakendus valmis, saate avada paar brauserit ja hakata Volt'i reaalajas võimalusi testima.
Kuigi Volt raamistik ei ole nii küps ja vastupidav kui enamik aastaid kasutusel olnud populaarseid Ruby raamistikke (Volti hetkel on see veel beetaversioon), tasub seda kaaluda ja uurida.
kuidas deebetkaarti häkkida
Kui olete huvitatud, kasutage seda Ruby raamistiku õpetust, et võtta Volt välja keerutamiseks. Hoidke silma peal edasistel arengutel, kuna Volt näeb isegi selles arengu varases staadiumis välja väga paljutõotav Ruby raamistik.
Valikus on palju lahedaid uusi funktsioone ja ma olen üsna kindel, et Volt muutub järgmise paari aasta jooksul asjakohasemaks, kuna rohkem inimesi hakkab sellega eksperimenteerima. Mitmete uuenduslike funktsioonide tõttu võiksid paljud arendajad Voltisse armuda ja seda järgmiseks kasutada Rubiini projekt .