Ruby on Rails
Ruby on Rails ili jednostavno Rails je razvojni okvir za veb, koji ima za cilj maksimizaciju programerske produktivnosti. Razvijen je pre više od deset godina.[1] Napisan na programskom jeziku Ruby i danas čini okosnicu mnogih najpopularnijih aplikacija na internetu[2]. U skladu sa time ima neverovatno aktivnu i entuzijastičnu zajednicu.
Ruby on Rails | |
---|---|
![]() | |
Originalni naziv | енгл. Ruby on Rails |
Autor(i) | David Hansson |
Aktuelna verzija | 5.0,objavljena 30. juna 2016. godine. |
Licenca | MIT licenca |
Veb-sajt | http://rubyonrails.org |
Rails je razvio David Heinemeier Hansson 2003. godine dok je radio na osnovama koda za Basecamp[3](alat za upravljanje projektima). David prestavlja Ruby on Rails i zvanično objavljuje njegov izvorni kod u julu 2004. godine[4]. Tokom godina Rails kod se razvijao zadržavajući tri glavna principa:
- Programski jezik Ruby kao osnovu
- MVC arhiktetura
- Programerska sreća
Istorija
уредиPrva verzija Ruby on Rails je nastala 2004. godine, a prva stabilna (1.0) je objavljena 13. decembra 2005. godine. Od tog trenutka Ruby On Rails dobija značajnu ulogu u svetu veb razvoja. Naredna verzija 2.0 je objavljena 6. decembra 2007. godine.
Rails 2.3 verzija je objavljena 15. marta 2009. godine sa velikim novim dostignućima u šablonima, ugnježdenim formama i Rack-u (interfejs za razvoj veb aplikacija u Rubiju).
23. decembra 2008. godine frejmvork veb aplikacije, Merb, je lansiran i Ruby on Rails je objavio da će sarađivati sa projektom u cilju unapređivanja Merb-a u verziji Rails 3, da bi se okončalo nepotrebno dupliranje. Merb se spojio sa Rails-om u verziji 3.0.
Verzija 3.1 je objavljena 31. avgusta 2011. u kojoj se jQuery pojavljuje kao podrazumevana biblioteka za JavaScript i nedavno uveden CoffeeScript.
Verzija Rails 3.2 objavljena je 20. januara 2012. godine, sa brzim režimom razvoja i usmeravanjem mašine. Rails 3.2.x je poslednja verzija koja podržava Ruby 1.8.7 . Rails 2.2.12 podržava Ruby 2.0.
Verzija 4.0 je objavljena 25. juna 2013. godine predstavljajući turbolinkove, prenose uživo kao i pravljenje aktivnih resursa i drugih opcionih komponenti za njihovo razdvajanje na sisteme za upravljanje paketima.
Verzija 4.1 je objavljena 8. aprila 2014. godine predstavljajući Spring, Variants, enumeracijski tip i secrets.yml.
Verzija 4.2 je objavljena 19. decembra 2014. godine predstavljajući Active Job, asinhrone mejlove, veb konzole i strane ključeve.
Verzija 5.0 je objavljena 30. juna 2016. godine.
Verzija | Datum |
---|---|
1.0[5] | 13. decembar 2005. |
2.0[6] | 7. decembar 2007. |
2.3[7] | 16. mart 2009. |
3.0[8] | 29. avgust 2010. |
3.1[9] | 29. avgust 2011. |
3.2[10] | 20. januar 2012. |
4.0[11] | 25. jun 2013. |
4.1[12] | 8. april 2014. |
4.2[13] | 19. decembar 2014. |
5.0[14] | 30. jun 2016. |
Razvoj
уредиRuby on Rails se često instalira koristeći RubyGems, sistem za upravljanje paketima koji je uključen u trenutnu verziju jezika Ruby. Mnogi Unix sistemi takođe podržavaju instalaciju Ruby on Rails-a i zavisni su od njegovih izvornih sistema za upravljanje paketima. Ruby on Rails je uglavnom razvijen za servere baza podataka kao što su MySQL i PostgreSQL i veb server koji pokreće Phusion Passanger modul.[15]
Filozofija i dizajn
уредиRuby on Rails podstiče naredne principe:
- Konvencija iznad konfiguracije
- Ne ponavljaj princip[16]
- Debeli modeli, mršavi kontroleri
Konvencija iznad konfiguracije - znači da postoji konvencija koju programer treba da poštuje i da treba samo da odredi nekonvencijalne aspekte aplikacije. Na primer, ako imamo klasu Sale u modelu, odgovarajuća tabela u bazi podataka će se podrazumevano zvati sales. Generalno, Ruby on Rails dovodi do skraćivanja i ponovnog korišćenja istog koda.
Ne ponavljaj se - sugeriše programeru da nije dobro ponavljati iste delove koda. Na primer, koristeći modul ActiveRecord programer ne mora da definiše imena kolona u bazi podataka prilikom definicija klasa. Umesto toga, Ruby on Rails može da izvede ovu informaciju preko imena klase iz baze podataka.
Debeli modeli, mršavi kontroleri - većinu aplikacija logički treba smestiti unutar modela ostavljajući kontrolere sto je moguće slobodnijim.
Tehnički pregled
уредиKao i mnogi veb okviri Ruby on Rails koristi MVC arhitekturu, obrazac za organizovanje programiranja aplikacija. U podrazumevanoj konfiguraciji, model u programskom okviru (frejmvork) se povezuje sa tabelom u bazi podataka i sa Ruby fajlovima. Na primer, model klase User će obično biti definisan u fajlu "user.rb" u direktorijumu aplikacija/modeli i povezan sa tabelom "users" u bazi podataka. Programeri mogu da ignorišu ovu konvenciju i biraju različita imena za svoje modele, fajlove i baze podataka, ali to nije uobičajena praksa i nije u skladu sa principom "konvencija iznad konfiguracije". Kontroler je komponenta sa serverske strane Rails-a koja odgovara spoljašnjim zahtevima veb servera aplikaciji. On određuje koji fajl se trenutno obrađuje. Kontroler može postaviti upit jednom ili više modela direktno za informacije i proslediti ih na pregled, kao i obezbediti jednu ili više akcija. Akcija je najčešće osnovna jedinica koja opisuje kako odgovoriti na specifičan spoljni zahtev veb pregledača. Takođe treba napomenuti da će akcija kontolera biti dostupna spoljnom veb zahtevu samo ako odgovarajuća putanja pokazuje na nju. Rails ohrabruje programere da koriste RESTful (Representational state transfer-Transfer reprezentacije stanja), veb servis koji omogućava kompatibilnost između različitih računarskih sistema na internetu. Isto tako podržava rad sa putanjama koje uključuju akcije kao što su kreiraj, novi, izmeni, dopuni, uništi, prikaži i slično. Ove putanje dolaznih zahteva kontroleru mogu biti jednostavno postavljene u konfiguracijski fajl routes.rb.
Ruby on Rails uglavnom nije povezan na internet direktno već preko nekih veb servera. Od 2008. godine pa nadalje najkorišćeniji veb server za Ruby on Rails je Passenger. IBM takođe podržava Ruby on Rails. Rails je isto tako vredan pažnje zbog široke upotrebe u Javaskriptu , Javaskript okvirima, Script.aculo.us Архивирано на сајту Wayback Machine (28. новембар 2016), za pisanje skripti korišćenjem AJAX-a.CoffeeScript je predstavljen u verziji 3.1 kao podrazumevani jezik za Javaskript. Počev od verzije 2.0 Ruby on Rails nudi i HTML i XML kao standardni format za izlaz. U verziji 3.1 Sass je postavljen za standardni CSS obrazac. Server podrazumevano koristi ugrađen Ruby u HTML pregledu fajlova koji imaju html.rb ekstenziju. Rails podržava zamenu alternativnih jezika za šablone kao sto su HAML i Mustache. Ruby on Rails 3.0 je dizajniran da radi sa JRuby 1.5.2, dok kod ranijih verzija nije bilo podržano.
Performanse
уредиStruktura frejmvorka
уредиRails je podeljen na razne pakete: Active Record (sistem za pristup bazama podataka), Active Resource (omogućava veb servis), Action Pack, Active Support i Action Mailer. Pre verzije 2.0 Ruby on Rails je takođe sadržao paket Action Web Service koji je zamenjen paketom Active Resource. Nezavisno od standardnih paketa, programeri mogu da instaliraju dodatke i da prošire postojeće pakete. Ranije verzije su podržavale dodatke unutar svojih uobičajnih okvira.
Rails obezbeđuje kompletne komponente za kreiranje veb aplikacija, od kojih su najvažnije:
- Pokretanje kontrolera
- Akcija pregleda
- Aktivan zapis
- Slanje poruka
- Aktivan izvor
- Railties
- Aktivna podrška
Pokretanje kontrolera
уредиPokretanje kontrolera je komponenta koja uređuje kontrolere u Rails aplikacijama. Pokretanjem rada kontrolera, frejmvork obrađuje dolazeće zahteve Rails aplikacija, izvlači parametre i otprema ih namenjenoj akciji. Servisi obezbeđeni ovom akcijom uključuju upravljanje sesijom, predstavljanje šablona i preusmeravanje upravljenja.
Akcija pregleda
уредиAkcija View upravlja izgledom Rails aplikacija. Može da kreira i HTML i XML izlaz kao podrazumevani. Akcija View upravljaju šablonima, uključujući ugnježdene i parcijalne šablone, i uključuju ugrađenu AJAX podršku.
Aktivan zapis
уредиAktivan zapis je baza za modelovanje u Rails aplikacijama. Obezbeđuje nezavisnost baze podataka, osnovnu CRUD(Create, read, update and delete) funkcionalnost, naprednu pretragu i omogućava povezivanje jednog modela sa drugima među ostalim servisima.
Slanje poruka
уредиSlanje poruka je frejmvork za izgradnju e-mail servisa. Možemo ga koristiti za slanje poruka zasnovanih na fleksibilnosti šablona ili da primimo i obradimo dolazeće poruke.
Aktivan izvor
уредиAktivan izvor obezbeđuje frejmvork za upravljanje konekcijama između biznis objekata RESTful veb servisa. Implementira način za povezivanje veb baziranih resursa sa lokalnim resursima CRUD(Create Read Update Delete) semantikom.
Railties
уредиRailties je jezgro Rails koda nad kojim su izgrađene nove Rails aplikacije i objedinjuje različite veb okvire u bilo kojoj Rails aplikaciji.
Aktivna podrška
уредиAktivna podrška je skupa kolekcija korisnih klasa i standardnih Ruby bibliotečkih ekstenzija koje se koriste u Rails-u, kako u kodu jezgra, tako i u aplikacijama.[17]
Skalabilnost
уредиRails koji se pokreće na Ruby interpretatoru Matz je kritikovan zbog problema sa skalabilnošću. Ta kritika se često pominje zbog raznih grešaka u okviru Twitter-a tokom 2007. godine i 2008. godine[18], što je podstaklo programere da Twitter delimično prebace na programski jezik Scala (koji se pokreće na Java virtuelnoj mašini (JVM))[19]. Ruby on Rails je pokretao korisnički interfejs Twitter-a sve do 2011. godine, kada je zamenjen zbog performansi.
Uprkos kritikama i poređenjima sa Javom, Gartner Research je zaključio 2011. godine da mnoge kompanije koje se bave veb programiranjem, koriste Ruby on Rails kako bi pravile agilne skalabilne aplikacije[20]. Neki od najvećih sajtova koji koriste Ruby on Rails su Airbnb, GitHub, Scribd, Shopity, Hulu i BaseCamp[21].
Procenjuje se da od januara 2016. godine preko 1.2 miliona veb sajtova koriste Ruby on Rails[22].
Bezbednost
уреди24. septembra 2013. godine, prijavljen je bezbednosni propust u Ruby on Rails-u. U podrazumevanoj konfiguraciji cela hash sesija je smeštena unutar sesije kolačića(cookies) (poznata kao CookieStore) dozvoljavajući bilo koju autentifikovanu sesiju da se uloguje kao ciljani korisnik u bilo kom trenutku u budućnosti. Kao radno okruženje administratori su savetovani da kolačiće smeste na server koristeći mehanizme kao što je ActiveRecordStore. Istraživači Daniel Jackson i Joseph Near su razvili debager "Space". On može da analizira pristup podacima preko pokretanja Rails programa i proveri da li se program pokreće po pravilima u okviru ograničenja pristupa. 15. aprila 2016. godine Joseph Near je izjavio da su analizom 50 popularnih veb aplikacija, koje koriste Space, otkrivena 23 prethodno nepoznata bezbednosna propusta.[23]
Reference
уреди- ^ Francl, Luke. „Looking Backward: Ten Years on Rails”. www.recursion.org (на језику: engleski).
- ^ „Ruby on Rails…” (на језику: engleski). Приступљено 29. 11. 2016.
- ^ BaseCamp
- ^ Gunner Technology. „Ruby on Rails History — A Look Back”. Архивирано из оригинала 06. 04. 2017. г. Приступљено 29. 11. 2016.
- ^ David. „Rails 1.0: Party like it's one oh oh!”. weblog.rubyonrails.org. Архивирано из оригинала 17. 12. 2015. г. Приступљено 29. 11. 2016.
- ^ „Rails 2.0: It's done!”. Приступљено 29. 11. 2016.
- ^ „Rails 2.3: Templates, Engines, Rack, Metal, much more!”. Приступљено 29. 11. 2016.
- ^ „Rails 3.0: It's done!”. Приступљено 29. 11. 2016.
- ^ „[ANN] Rails 3.1.0.rc8”. Приступљено 29. 11. 2016.
- ^ „Rails 3.2.0: Faster dev mode & routing, explain queries, tagged logger, store”. Приступљено 29. 11. 2016.
- ^ „Rails 4.0.0”. Приступљено 29. 11. 2016.
- ^ „Rails 4.1.0: Spring, Variants, Enums, Mailer previews, secrets.yml”. Архивирано из оригинала 08. 12. 2015. г. Приступљено 29. 11. 2016.
- ^ „Rails 4.2: Active Job, Asynchronous Mails, Adequate Record, Web Console, Foreign Keys”. Архивирано из оригинала 09. 12. 2015. г. Приступљено 29. 11. 2016.
- ^ „Rails 5.0: Action Cable, API mode, and so much more”. Архивирано из оригинала 30. 06. 2016. г. Приступљено 29. 11. 2016.
- ^ Phusion Passenger modul
- ^ „Getting Started with Rails”. Приступљено 29. 11. 2016.
- ^ Mike Gunderloy; Dave Rothlisberger. „Getting started with Rails”. guides.rubyonrails.org (на језику: engleski). Приступљено 5. 12. 2016.
- ^ Josh Kenzer (29. 03. 2007). „5 Question Interview with Twitter Developer Alex Payne” (на језику: engleski). Архивирано из оригинала 23. 04. 2009. г. Приступљено 29. 11. 2016.
- ^ Cade Metz (01. 04. 2009). „Twitter jilts Ruby for Scala” (на језику: engleski). Приступљено 29. 11. 2016.
- ^ Tom Mornini; Engine Yard (11. 05. 2011). „Here's Why Ruby On Rails Is Hot” (на језику: engleski). Приступљено 29. 11. 2016.
- ^ Kelli Smith (02. 02. 2015). „37 Sites You LOVE Built With Ruby On Rails” (на језику: engleski). Приступљено 29. 11. 2016.
- ^ „Ruby on Rails Usage Statistics”. Приступљено 29. 11. 2016.
- ^ Larry Hardesty (15. 04. 2016). „Patching up Web applications”. Приступљено 29. 11. 2016.