Varför Rails?

Ditt val, när du lär dig en ny ram, är en otroligt viktig. Det tar otaliga timmar och ansträngningar att bli skicklig och lära sig alla bästa metoder - även för erfarna utvecklare.

Därför är det nödvändigt att förstå egenskaperna hos ett ramverk så tidigt som möjligt för att avgöra om det är rätt lösning för det problem du försöker lösa. I den här artikeln kommer jag att täcka många av nyckelområdena i Ruby on Rails-ramverket, och varför anser jag att det är ett utmärkt val för webbutvecklare.


Några historier

Ruby on Rails extraherades från projekthanteringsansökan Basecamp.

Ruby on Rails var öppen 2004, av David Heinemeier Hannson, efter att ha hämtats från projekthanteringsansökan Basecamp.

Det är baserat på Ruby programmeringsspråk, och den nuvarande stabila versionen är 3,2 - med 4,0 precis runt hörnet!

RoR är en komplett webbapplikationsstack; från och med version 3.1 innehåller det också faciliteter och bibliotek för att hantera frontendkod, stödja Sass och CoffeeScript ur lådan, utan att behöva externt verktyg för att hantera kompileringsprocessen. Opinionsflödet är namnet på spelet med Rails.

För utveckling, inbjuder den sin egen webbserver, så att du inte behöver installera extra program än en fungerande Ruby-installation.


Varför lära dig det?

Det finns otaliga skäl att lära sig Rails, allt från teknisk till företag och produktivitet. Vi ska ta itu med var och en för en.

Teknologi

Ruby har utformats för att vara en "glädje att använda".

Som namnet antyder är Rails baserat på Ruby-språket. Inventad 1993 och publicerad för första gången 1995 av Yukihiro Matsumoto (allmänt känd helt enkelt som "Matz") är Ruby ett objektorienterat tolkat språk som innehåller en syntax som är starkt inspirerad av Perl och Lisp. Sedan starten har Ruby utformats för att vara en "glädje att använda" - vilket innebär ett starkt fokus på läsbarhet och elegans.

Ruby är ett högre språk, Ruby är extremt kraftfullt och mångsidigt, samtidigt som man behåller en bra balans mellan tydlighet och prestanda (med tanke på att det fortfarande är ett tolkat, dynamiskt språk).

Den ursprungliga Ruby-tolken (Matz's Ruby Interpreter, förkortad som MR) är skriven i C, men det är inte den enda som finns idag (ett par noterbara alternativ är JRuby, som körs ovanpå JVM och Rubinius).

Ruby har flera bibliotek som levereras med kärnan, inklusive en mycket kraftfull enhetstestning, kallad Minitest (före Ruby 1.9, Ruby som används TestUnit).

Rails är ett populärt sätt att bli involverad i Ruby, så det är inte sällsynt att hitta personer (inklusive mig själv), vars första introduktion till Ruby var genom Rails.

Lär dig grunden för Ruby med Tuts + Premium.

Strukturera

Rails är starkt uppfattade när det gäller arkitektoniska beslut

Rails är en databas-agnostisk MVC-ram som väljer konvention över konfiguration, vilket innebär att den är starkt uppfattad när det gäller arkitektoniska beslut, namngivna konventioner, vägar och mönster.

I mer detalj:

  • MVC innebär att det följer modell-View-Controller-paradigmet, så att du tydligt kan skilja problem när du utvecklar en applikation. Detta gör att din kärnverksamhetslogik kan vara på en enda plats, vilket undviker dubbelarbete och hjälper till med underhåll.

  • Det följer ett RESTful, resursorienterat tillvägagångssätt, vilket innebär att det uppmuntrar dig att tänka på din affärslogik ur datainställningen och exponera resurser till slutpunkter som utför CRUD-åtgärder. Till exempel kan man logga in på en webbplats som "skapa en session"; loggar ut som "förstör en session". Detta tillvägagångssätt tar lite vana vid, men när du väl har antagit den tanken hjälper det att hålla gränssnitten konsekventa och förutsägbara av andra utvecklare. Rails applikationer tenderar att rotera kring modeller, som hanterar data uthållighet.

  • Det använder Bundler som ett verktyg för beredskapshantering, som utnyttjar kraften i Rubygems-samhället. Detta säkerställer en konsekvent metod för att lägga till tredje parts funktionalitet till en applikation med ett explicit format som beskriver vilka bibliotek vi behöver, och vilka versioner, inklusive att lösa inbädda avhängigheter.

  • Det kan stödja ett brett spektrum av databaser, med SQLite som standard (bra för utveckling) och MysQL och PostgreSQL som första val för produktion. MongoDB kan också integreras med minimal ansträngning.

  • Konventionen betyder att namngivning, vägar och mönster oftast är förutsägbara och delas bland andra Rails-utvecklare. Detta garanterar en lättare inlärningskurva, fokuserad på affärslogiken för appen, enklare underhåll och mindre dokumentation.

  • Det är lätt att testa med verktyg som integreras med ramverket för enhetstestning och integration (med JavaScript-stöd). Dessutom, Ruby-gemenskapen, förespråkar starkt testdriven utveckling, så en bra Rails-utvecklare är troligen ganska erfaren i testning.

  • En Rails-applikation kan enkelt distribueras till molninfrastrukturer, som Heroku, eller direkt till privata servrar (det går bra på Ubuntu Linux, till exempel).

Kärnfunktioner

Här är en grundläggande översikt över vad Rails kan göra ur lådan, tillsammans med några kodexempel. Observera att även om du aldrig har arbetat med Rails före eller ens inte känner till Ruby, bör det inte hindra dig från att förstå dem, eftersom de är ganska läsbara.

  • Stöd för datamodelldefinition genom migreringar, dvs repeterbara och reversibla databas agnostiska instruktioner, som manipulerar databasstrukturen. Tänk på följande migrering:

    klass 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 t.timestamps slutet änden

    Denna migrering skapar en evenemang tabell med några grundläggande data, som a titel, och använder specifika datatyper som är mappade till specifika kolumntyper i den underliggande databasen. Till exempel, som standard, sträng använder a VARCHAR (255) kolumn om du använder MySQL. Denna migrering kan skrivas manuellt från början eller genereras från kommandoraden och redigeras sedan innan den körs.

  • Databas agnostiskt modellgränssnitt för CRUD-åtgärder. Här är några exempel, givet a Nyheter modell:

    news = News.new (title: 'Sample news') # => returnerar en nyhetsinstans, inte sparad i databasen news.save # => kör ett inläggsförfrågan och uppdaterar förekomsten med det returnerade idet från databasen news.title = 'Uppdaterad provnyhet' # => Anger titeln till det nya värdet utan att spara till databasen news.save # => kör en uppdateringsfråga för det objektet news.destroy # => kör en raderingsfråga för det objektet

    Dessutom ger Rails ett enkelt gränssnitt för att utföra urvalsfrågor, inklusive kopplingar mellan modeller.

    News.where (publicerad: true) .order ('created_at DESC') .gräns (5) # => producerar 'SELECT * från nyheter där publiceras = 1 order by created_at DESC limit 5'
  • Stöd för valideringar en Händelse Modellen kan alltid kräva närvaron av en unik titel. I det fallet är det möjligt att tydligt uttrycka dessa krav i Händelse klass:

    klasshändelse < ActiveRecord::Base validates :title, :presence => sant: unikthet => sant slut

    Denna funktionalitet garanterar att ingen ogiltig post sparas i databasen och ger också alla bindningar som behövs för att visa valideringsfel för användaren (till exempel i en form).

  • Session och cookies med enkla hjälpare att ställa in värden, få och ta bort dem med transparent signatur.

  • Skydd mot formförfalskning, så att alla former du genererar genom Rails signeras automatiskt med ett token som garanterar det verkligen.

  • Aggressiv XSS-skyddspolicy som standard, så att alla formelement du använder är skyddad som standard, såvida du inte uttryckligen vitlistar den (var försiktig när du gör det!).

  • Enkel hantering för SKAFFA SIG och POSTA data, tillgänglig via en enkel hash som är tillgänglig i alla kontroller åtgärder.

  • Enkla bindningar för att ansluta controllers, modeller och visningar, med tydliga och konventionella regler som förenklar filhantering och kod. Tänk på följande kontroller som ansvarar för att göra en nyhetslista på http://example.com/news:

    klass NewsController < ApplicationController def index end end

    Även utan att skriva någon kod för att definiera vad index gör, Rails ger ett standardbeteende, vilket är att göra app / vyer / nyheter / index.html.erb se. Detta minskar behovet av pannkodskod, eftersom det oftast är nödvändigt att överdriva beteende när det är okonventionellt.

  • Integration med externa tjänster; Rails erbjuder ett rikt ekosystem av applikationer som du kan använda för att övervaka, underhålla och förbättra din ansökan (vissa av dem arbetar även med andra ramar). New Relic hjälper till att övervaka prestanda, Airbrake Bug Tracker samlar undantag för att meddela utvecklingslaget, Code Climate analyserar din kodbas för kvalitet, komplexitet och dubbelarbete. Tddium och TravisCI kan köra din testpaket på distans mot olika Ruby-versioner.

  • Som tidigare nämnts erbjuder Rails också en integrerad miljö för att arbeta med Coffeescript och Sass, med öppen sammansättning i utveckling och förbehandling och cache-avbrott för distribution, så att din produktionsapp kommer att betjäna enkla, minifrerade filer med en signatur i filnamnet. På det här sättet kan du vara helt säker på att en webbläsare alltid laddar och cachar den senaste versionen av filen.


Affärsvärde

Har du någonsin undrat varför Rails är förstahandsvalet för många webstart? Det finns två huvudskäl:

  • Det låter dig arbeta med funktioner med minimal pannplatta, vilket tar bort en hel del icke-företagsrelaterat arbete från utvecklingsprocessen. Detta innebär en ökad hastighet när det gäller att utveckla och distribuera nya funktioner, vilket är nyckeln till förståelsen om produkten är solid.

  • Rails struktur gör det enkelt att ta emot förändringar. Detta gäller säkert för många MVC-ramar, men Rails är särskilt bra för att omstrukturera ditt applikationsflöde, återanvända komponenter på ett enkelt sätt.

Det är viktigt att komma ihåg att det ofta är dyrare att utveckla tiden än en extra server.

Det finns alltid en pågående konversation om Rails prestanda och hur det kan bli en flaskhals när du får tusentals träffar en minut. Problemet är att det krävs en stor insats för att nå den trafiken. Sanningen är: 9 gånger av 10, skalbarhet är ett problem som många företag aldrig behöver möta. För dem är förmågan att göra ändringar, lätt underhåll och förutsägbarhet mycket värdefullare.

Dessutom är det viktigt att komma ihåg att det ofta är dyrare att utveckla tiden än en extra server. En ram som Rails är ofta att föredra, för även om det kan behöva mer kraftfull maskinvara, är det fortfarande kostnadseffektivt inom andra områden.

Det betyder inte att du inte bryr dig om hur du utför din kod eller oroar dig för ämnen, till exempel caching och sökoptimering. Istället betyder det att du tar hänsyn till hela spektrumet av hårdvaru- och mjukvaruändringar du kan göra; Ibland är det vettigt att pospone en prestationsfokuserad bit av arbete och tillfälligt ha mer kraftfull maskinvara för att fortsätta arbeta med viktiga funktioner.


Förlängning av ramverket

Rails kan enkelt utökas med en mängd olika externa bibliotek, fördelade via Rubygems. De flesta gånger, alla funktioner som du behöver bygga erbjuds redan genom en pärla. Nu betyder det inte att att lägga till ädelstenar är den perfekta lösningen; varje tredjepartsberoende som du lägger till i en ansökan blir en riskfaktor.

Ibland föredrar du att rulla din egen version med anpassad kod.

Med det sagt bör du inte återuppfinna hjulet. Många Rails-applikationer använder samma pärlor för att ge specifika funktioner. detta kan ses som en fördel. Kom ihåg att den stora användningen översätts till bred testning, så det anses vara en säker praxis att använda vissa kända pärlor för att utföra viktiga uppgifter. Här är några exempel:

  • Devise, för användarregistrering, inloggning och hantering
  • Enkel form, för enkel och anpassningsbar formmarkeringsgenerering
  • Kaminari, för pagination
  • ActiveAdmin, för snabb admin sidor

Denna lista kan lätt gå vidare, men poängen är att Rails använder modulariteten av ett Rubygems-baserat tillvägagångssätt och kan påskynda utvecklingen kraftigt, genom att fokusera på att bygga funktioner som är viktiga för den produkt du jobbar på, istället för boilerplate.


Varför tycker jag om att arbeta med spår

Jag kan fokusera på vad som är viktigt för kunder utan att äventyra god kodkvalitet.

För ungefär två år sedan arbetade jag med en marknadsföring / produktledningsroll (gör webbutveckling som en hobby); vilket innebar att man fokuserade på produktegenskaper, deras affärsvärde och kostnaderna i samband med deras utveckling. När jag bestämde mig för att byta karriärer, hade Rails 3.0 just släppts. Jag tillbringade en eftermiddag som tittade på videor och läste handledning. Jag bestämde mig snabbt att Rails var vad jag ville fokusera på mina insatser på.

Orsaken - och detta överlappar något med vad vi redan har diskuterat - är att jag kunde se en praktisk inställning i Framemork, ett tydligt mål att vara produktiv och fokusera på produkten och dess utveckling. Jag kunde få saker gjort på kort tid. Efter några månader med intensiv självutbildning genom olika webbtutorials och några exempelapplikationer, ansökte jag om mitt nuvarande jobb som en Rails-utvecklare vid New Bamboo.

Jag gillar att arbeta med Rails varje dag, för jag kan fokusera på vad som är viktigt för kunderna utan att äventyra god kodkvalitet. För mig är det den perfekta utgångspunkten för de flesta webbaserade applikationer.

Det löser inte alla problem du kommer att stöta på när du bygger stora webbapplikationer. Det finns tillfällen när du tydligt ser att Rails inte passar för en viss typ av tjänst, men det är dags att dela upp arkitekturen i mindre applikationer.


Slutsats

Rails är en kraftfull ram som kan hjälpa dig att bli mer produktiv och säker när du arbetar med komplexa projekt. Detta är möjligt tack vare sina starka konventioner och solid struktur. Stort företag, som 37 Signals, Pivotal Labs, Groupon (eller till och med Twitter i gamla tider) har valt Rails som basarkitektur för sina kärnanvändningar. Det finns en anledning till varför!

Klar för att starta Riding Ruby on Rails?