Waarom Rails?

Uw keuze, wanneer u een nieuw raamwerk leert, is ongelooflijk belangrijk. Het kost ontelbare uren en inspanningen om bekwaam te worden en alle best practices te leren - zelfs voor ervaren ontwikkelaars.

Daarom is het nodig om de eigenaardigheden van een raamwerk zo vroeg mogelijk te begrijpen, om te bepalen of dit de juiste oplossing is voor het probleem dat u probeert op te lossen. In dit artikel bespreekt ik veel van de belangrijkste gebieden van het Ruby on Rails-framework en waarom ik vind dat het een uitstekende keuze is voor webontwikkelaars.


Een beetje geschiedenis

Ruby on Rails is ontleend aan de projectmanagementapplicatie Basecamp.

Ruby on Rails werd in 2004 opengesteld, door David Heinemeier Hannson, na te zijn geëxtraheerd uit de projectbeheerapplicatie, Basecamp.

Het is gebaseerd op de programmeertaal Ruby en de huidige stabiele release is 3.2 - met 4.0 net om de hoek!

RoR is een volledige webapplicatiestapel; beginnend met versie 3.1, bevat het ook faciliteiten en bibliotheken om de frontend-code te beheren en Sass en CoffeeScript out-of-the-box te ondersteunen, zonder externe tool voor het beheer van het compileerproces. Opinionated workflow is de naam van het spel met Rails.

Voor ontwikkeling sluit het zijn eigen webserver in, zodat u geen extra software hoeft te installeren, afgezien van een werkende Ruby-installatie.


Waarom het leren?

Er zijn talloze redenen om Rails te leren, van technisch tot zakelijk en van productiviteit. We pakken ze allemaal één voor één aan.

Technologie

Ruby is ontworpen om een ​​"plezier om te gebruiken" te zijn.

Zoals de naam al aangeeft, is Rails gebaseerd op de Ruby-taal. Ruby, uitgevonden in 1993 en voor het eerst vrijgegeven in 1995 door Yukihiro Matsumoto (algemeen bekend als "Matz"), is een object-georiënteerde, geïnterpreteerde taal met een syntaxis die sterk geïnspireerd is door Perl en Lisp. Sinds zijn oprichting is Ruby ontworpen om een ​​"plezier om te gebruiken" te zijn - wat betekent een sterke focus op leesbaarheid en elegantie.

Ruby is een taal op een hoger niveau en is buitengewoon krachtig en veelzijdig, met behoud van een goede balans tussen helderheid en prestaties (in gedachten houdend dat het nog steeds een geïnterpreteerde, dynamische taal is).

De originele Ruby-vertaler (Matz's Ruby Interpreter, afgekort als MRI) is geschreven in C, maar het is niet de enige die tegenwoordig beschikbaar is (een paar opvallende alternatieven zijn JRuby, die bovenop de JVM loopt en Rubinius).

Ruby bevat verschillende bibliotheken die worden geleverd met zijn kern, waaronder een zeer krachtige unit die een test uitvoert, genaamd Minitest (voorafgaand aan Ruby 1.9, Ruby gebruikt TestUnit).

Rails is een populaire manier om betrokken te raken bij Ruby, dus het is tegenwoordig niet zeldzaam om mensen (waaronder ikzelf) te vinden wiens eerste introductie in Ruby via Rails was.

Leer de basisprincipes van Ruby met Tuts + Premium.

Structuur

Rails is sterk eigenzinnig als het gaat om architecturale beslissingen

Rails is een database-agnostisch MVC-raamwerk dat conventie over configuratie kiest, wat betekent dat het sterk eigenzinnig is, als het gaat om architecturale beslissingen, naamgevingsconventies, paden en patronen.

Meer gedetailleerd:

  • MVC betekent dat het het paradigma Model-View-Controller volgt, zodat u uw zorgen duidelijk kunt scheiden bij het ontwikkelen van een toepassing. Hierdoor kan uw core business-logica zich op één plek bevinden, dubbel werk vermijden en assisteren bij het onderhoud.

  • Het volgt een RESTful, resource-georiënteerde benadering, wat betekent dat het u aanmoedigt om vanuit uw data-oogpunt na te denken over uw bedrijfslogica, waarbij middelen worden blootgesteld aan eindpunten die CRUD-acties uitvoeren. Loggen op een site kan bijvoorbeeld worden gezien als 'een sessie maken'; uitloggen als 'een sessie vernietigen'. Deze aanpak is even wennen, maar als je eenmaal die denkwijze hebt aangenomen, helpt het je om je interfaces consistent en voorspelbaar te houden voor andere ontwikkelaars. Rails-toepassingen hebben de neiging om rond modellen te draaien, die gegevenspersistentie beheert.

  • Het maakt gebruik van Bundler als hulpmiddel voor afhankelijkheidsbeheer en maakt gebruik van de kracht van de Rubygems-community. Dit zorgt voor een consistente aanpak voor het toevoegen van functionaliteit van derden aan een toepassing, met een expliciete indeling die aangeeft welke bibliotheken we nodig hebben en welke versies, inclusief het oplossen van geneste afhankelijkheden.

  • Het kan een breed scala aan databases ondersteunen, met SQLite als standaard (goed voor ontwikkeling) en MysQL en PostgreSQL als eerste keuzes voor productie. MongoDB kan ook met minimale inspanning worden geïntegreerd.

  • Conventie betekent dat naamgeving, paden en patronen meestal voorspelbaar zijn en gedeeld worden door andere ontwikkelaars van Rails. Dit zorgt voor een gemakkelijkere leercurve, gericht op de bedrijfslogica voor de app, eenvoudiger onderhoud en minder documentatie.

  • Het is eenvoudig te testen, met tools die integreren met het framework voor unit testing en integratie (met JavaScript-ondersteuning). Bovendien pleit de Ruby-community zelf sterk voor testgestuurde ontwikkeling, dus een goede Rails-ontwikkelaar is waarschijnlijk behoorlijk ervaren in het testen.

  • Een Rails-applicatie kan eenvoudig worden geïmplementeerd in cloudinfrastructuren, zoals Heroku, of rechtstreeks naar privéservers (hij werkt bijvoorbeeld uitstekend op Ubuntu Linux).

Kernfuncties

Hier is een basisoverzicht van wat Rails uit de doos kan doen, samen met enkele codevoorbeelden. Houd er rekening mee dat, zelfs als je nog nooit eerder met Rails hebt gewerkt of zelfs Ruby niet kent, dit niet moet voorkomen dat je ze begrijpt, omdat ze behoorlijk leesbaar zijn.

  • Ondersteuning voor de definitie van gegevensmodellen door middel van migraties, d.w.z. herhaalbare en omkeerbare database-agnostische instructies, die de databasestructuur manipuleren. Overweeg de volgende migratie:

    klasse CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :title t.date :start_date t.date :end_date t.boolean :live, :default => false end.timestamps end end end

    Deze migratie zorgt voor een events tabel, met enkele basisgegevens, zoals a titel, en gebruikt specifieke gegevenstypen die zijn toegewezen aan specifieke kolomtypen in de onderliggende database. Bijvoorbeeld standaard, draad gebruikt een VARCHAR (255) kolom, bij gebruik van MySQL. Deze migratie kan handmatig vanuit het niets worden geschreven of worden gegenereerd vanaf de opdrachtregel en vervolgens worden bewerkt voordat ze worden uitgevoerd.

  • Database agnostische modelinterface voor CRUD-acties. Hier zijn een paar voorbeelden, gegeven een Nieuws model:

    news = News.new (titel: 'Voorbeeldnieuws') # => retourneert een nieuwsinstantie, niet opgeslagen in de database news.save # => voert een invoegquery uit en werkt het exemplaar met de geretourneerde id bij vanuit de database news.title = 'Bijgewerkt voorbeeldnieuws' # => stelt de titel in op de nieuwe waarde, zonder in de database op te slaan news.save # => voert een update-zoekopdracht uit voor dat item news.destroy # => voert een verwijderquery uit voor dat item

    Bovendien biedt Rails een eenvoudige interface om selectiequery's uit te voeren, inclusief joins tussen modellen.

    News.where (gepubliceerd: true) .order ('created_at DESC'). Limit (5) # => produceert 'SELECT * uit nieuws waarbij gepubliceerd = 1 bestelling gemaakt door DESC limit 5'
  • Ondersteuning van validaties; een Evenement model kan altijd de aanwezigheid van een unieke titel vereisen. In dat geval is het mogelijk om deze vereisten duidelijk uit te drukken in de Evenement klasse:

    klasse evenement < ActiveRecord::Base validates :title, :presence => waar,: uniciteit => echt einde

    Deze functionaliteit zorgt ervoor dat er geen ongeldige record wordt opgeslagen in de database en biedt ook alle bindingen die nodig zijn om validatiefouten weer te geven voor de gebruiker (bijvoorbeeld in een formulier).

  • Sessie en cookies met eenvoudige helpers om waarden in te stellen, te krijgen en te verwijderen, met transparante handtekening.

  • Bescherming tegen formuliervervalsing, zodat elke vorm die u genereert via Rails automatisch wordt ondertekend met een token dat zijn oprechtheid waarborgt.

  • Agressief XSS-beveiligingsbeleid standaard ingeschakeld, zodat elk formulierelement dat u gebruikt, standaard wordt beveiligd, tenzij u het expliciet op de witte lijst plaatst (voorzichtig als u dat doet!).

  • Eenvoudig beheer voor KRIJGEN en POST gegevens, toegankelijk via een eenvoudige hash beschikbaar in elke actie van de controller.

  • Eenvoudige bindingen om controllers, modellen en views te verbinden, met duidelijke en conventionele regels die bestandsbeheer en code vereenvoudigen. Bekijk bijvoorbeeld de volgende controller die verantwoordelijk is voor het weergeven van een nieuwslijstpagina op http://example.com/news:

    class NewsController < ApplicationController def index end end

    Zelfs zonder een code te schrijven om te definiëren wat inhoudsopgave doet, Rails biedt een standaard gedrag, dat is om de app / views / nieuws / index.html.erb uitzicht. Dit vermindert de behoefte aan boilerplate-code, omdat het meestal alleen nodig is om gedrag te overschrijven, wanneer onconventioneel.

  • Integratie met externe diensten; Rails biedt een rijk ecosysteem van toepassingen die u kunt gebruiken om uw toepassing te controleren, te onderhouden en te verbeteren (sommige werken ook met andere frameworks). Nieuwe Relic helpt bij het bewaken van de prestaties, Airbrake Bug Tracker verzamelt uitzonderingen om het ontwikkelingsteam te informeren, Code Climate analyseert uw codebasis op kwaliteit, complexiteit en duplicatie, Tddium en TravisCI kunnen uw testsuite op afstand uitvoeren tegen verschillende Ruby-versies.

  • Zoals eerder vermeld, biedt Rails ook een geïntegreerde omgeving om te werken met Coffeescript en Sass, met transparante compilatie in ontwikkeling en voorbewerking en cachebusting voor implementatie, zodat uw productie-app enkelvoudige, verkleinde bestanden met een handtekening in de bestandsnaam zal weergeven. Op deze manier kunt u er absoluut zeker van zijn dat elke browser de nieuwste versie van het bestand altijd zal laden en cachen.


Bedrijfswaarde

Heb je je ooit afgevraagd waarom Rails de eerste keuze is van veel web startups? Er zijn twee hoofdredenen:

  • Hiermee kunt u werken aan functies met een minimale boilerplate, waardoor veel niet-bedrijfsgerelateerd werk uit het ontwikkelingsproces wordt verwijderd. Dit vertaalt zich in een verhoogde snelheid bij het ontwikkelen en implementeren van nieuwe functies, wat van groot belang is om te begrijpen of het product solide is.

  • De structuur van de rails maakt het gemakkelijk om wijzigingen aan te passen. Dit geldt zeker voor veel MVC-frameworks, hoewel Rails vooral goed is in het herstructureren van uw applicatieflow, componenten op een eenvoudige manier hergebruikt.

Het is belangrijk om te onthouden dat ontwikkeltijd vaak duurder is dan een extra server.

Er is altijd een voortdurend gesprek over de prestaties van Rails en hoe het een bottleneck kan worden als u duizenden hits per minuut ontvangt. Het probleem is dat het bereiken van dat verkeersniveau een enorme inspanning vereist. De waarheid is: 9 van de 10 keer, schaalbaarheid is een probleem waar veel bedrijven nooit mee te maken hebben. Voor hen zijn het vermogen om veranderingen aan te brengen, gemakkelijke onderhoudbaarheid en voorspelbaarheid veel waardevoller.

Daarnaast is het belangrijk om te onthouden dat ontwikkeltijd vaak duurder is dan een extra server. Een raamwerk als Rails heeft vaak de voorkeur, omdat het, zelfs als het meer krachtige hardware nodig heeft, nog steeds kosteneffectief is op andere gebieden.

Dit betekent niet dat u niet om de uitvoering van uw code hoeft te geven of zich zorgen hoeft te maken over onderwerpen, zoals caching en query-optimalisatie. In plaats daarvan houdt dit in dat u rekening houdt met het volledige spectrum van hardware- en softwarewijzigingen die u kunt aanbrengen; soms is het verstandig om een ​​op prestaties gericht stuk werk uit te stellen en tijdelijk meer krachtige hardware te hebben om te blijven werken aan belangrijke functies.


Het kader uitbreiden

Rails kunnen eenvoudig worden uitgebreid met een grote verscheidenheid aan externe bibliotheken, verspreid via Rubygems. Meestal wordt elke functie die je moet bouwen al aangeboden via een edelsteen. Dit betekent niet dat het toevoegen van edelstenen de perfecte oplossing is; elke afhankelijkheid van derden die u toevoegt aan een applicatie, wordt een risicofactor.

Soms is het beter om uw eigen versie met aangepaste code te rollen.

Dat gezegd hebbende, zou je het wiel niet opnieuw moeten uitvinden. Veel Rails-applicaties gebruiken dezelfde edelstenen om specifieke functies te bieden; dit kan als een voordeel worden gezien. Onthoud: wijd gebruik vertaalt zich naar brede testen, dus het wordt als een veilige gewoonte beschouwd om bepaalde bekende edelstenen te gebruiken om belangrijke taken uit te voeren. Hier zijn een paar voorbeelden:

  • Bedenk, voor aanmelding door gebruikers, login en beheer
  • Eenvoudig formulier, voor eenvoudige en aanpasbare vormmarkupgeneratie
  • Kaminari, voor paginering
  • ActiveAdmin, voor snelle beheerderspagina's

Deze lijst zou gemakkelijk kunnen doorgaan, maar het gaat erom dat Rails gebruik maakt van de modulariteit van een op Rubygems gebaseerde aanpak en de ontwikkeling enorm kan versnellen, door de nadruk te leggen op het bouwen van functies die belangrijk zijn voor het product waar je aan werkt, in plaats van boilerplate.


Waarom ik geniet van het werken met rails

Ik kan me richten op wat belangrijk is voor klanten, zonder in te boeten aan een goede codekwaliteit.

Ongeveer twee jaar geleden was ik werkzaam in een marketing / product management rol (doe webontwikkeling als een hobby); Dat betekende dat we ons focusten op productkenmerken, hun zakelijke waarde en de kosten die gepaard gaan met hun ontwikkeling. Toen ik besloot om van loopbaan te veranderen, was Rails 3.0 net vrijgegeven. Ik bracht een middag door met het bekijken van video's en het lezen van tutorials. Ik besloot snel dat Rails was waar ik mijn inspanningen op wilde richten.

De reden - en dit overlapt enigszins met wat we al hebben besproken - is dat ik een praktische benadering in de framemark kon zien, een duidelijk doel om productief te zijn en me te concentreren op het product en de ontwikkeling ervan. Ik zou in een korte tijd dingen voor elkaar kunnen krijgen. Na een paar maanden van intensieve zelftraining via verschillende webhandleidingen en enkele voorbeeldtoepassingen, solliciteerde ik voor mijn huidige baan als Rails-ontwikkelaar bij New Bamboo.

Ik werk graag elke dag met Rails, omdat ik me kan concentreren op wat belangrijk is voor klanten zonder in te boeten aan een goede codekwaliteit. Voor mij is dit het perfecte startpunt voor de meeste webgebaseerde applicaties.

Het lost niet alle problemen op die u tegenkomt bij het bouwen van grote webapplicaties. Er zijn tijden dat je duidelijk ziet dat Rails niet geschikt is voor een specifiek soort service, maar dat is het moment om de architectuur in kleinere applicaties te splitsen.


Conclusie

Rails is een krachtig raamwerk dat u kan helpen productiever en zelfverzekerder te worden wanneer u aan complexe projecten werkt. Dit is mogelijk dankzij de sterke conventies en solide structuur. Grote bedrijven, zoals 37 Signals, Pivotal Labs, Groupon (of zelfs Twitter in de oude dagen) hebben Rails gekozen als de basisarchitectuur voor hun kernapplicaties. Er is een reden waarom!

Klaar om Ruby on Rails te gaan berijden?