Ny version av BoPunkten med Ruby on Rails
Det är inte hela dagarna vi på NetRelations jobbar med EPiServer. Just nu håller vi som bäst på med en ny version av BoPunkten, där vi har valt att använda programmeringsmiljön Ruby on Rails istället för ASP.NET som EPiServer bygger på.
Vad är BoPunkten?
BoPunkten är en webbtjänst för bostadsannonsering som funnits i över 10 år. Den ger möjlighet att annonsera ut rum, lägenheter och hus för uthyrning både i första och andra hand. Besökare kan sedan söka bland annonserna och bli medlemmar för att kontakta annonsörerna.
Vad är Ruby on Rails?
Ruby on Rails (eller bara kort och gott "Rails") är ett ramverk för webbutveckling som både fått utstå en jättehype och mycket skepsis de senaste åren. Det är sprunget ur jobbet som David Heinemeier Hansson gjorde med 37signals projekthanteringsverktyg Basecamp. När Basecamp skulle omvandlas från idé till verklighet ville David implementera det i det utanför Japan inte speciellt vanligt förekommande objektorienterade programspråket Ruby.
Sagt och gjort, Basecamp byggdes, och i processen extraherades ett ramverk för att bygga andra webbapplikationer. Det är en av de saker som skiljer Rails från andra webbutvecklingsramverk (som exempelvis ASP.NET); det är inte uppbyggt "för sin egen skull", utan funktioner har lagts till för att de behövdes på riktigt i en viss situation.
Rails bygger på principen "convention over configuration" (konvention framför konfigurering), vilket innebär att när man skapar sin Railsapplikation har den en uppsättning inställningar som standard. I många fall behöver man inte ändra speciellt mycket av dessa inställningar (även om det går utmärkt att ändra dem). När man sätter igång är den enda konfigurering man behöver göra att ange vilken databas som ska användas.
En Railsapplikation byggs upp enligt mönstret Model-View-Controller, vilket innebär en bra separering mellan ren datahantering (som sker i Model-lagret), Presentation (som sköts av View-lagret) och kopplingen däremellan (Controller-lagret). Detta är inget som är unikt för Rails, men mönstret är en stark konvention i Rails vilket gör det lätt att följa. En grundsten i Rails är också implementationen av ActiveRecord, ett mönster för objekt-relationsmappning. Det gör att dataklasser finns mer eller mindre per automatik baserat på databasstruktur och är synnerligen trevligt.
Skillnader mot ASP.NET/C#
Syntaxen i Ruby är ganska annorlunda mot i C#, som vi brukar använda i ASP.NET. Ruby är mer kortfattat, men samtidigt avsett att vara mer läsbart genom att ha en "ordföljd" som liknar talat språk. För min egen del var det svårt att förstå en del av syntaxen när jag först började titta på det, men det gick snabbt att lära sig. Jag är också väldigt förtjust i många konstruktioner i Ruby som ger mycket mer kortfattad kod är motsvarigheten i C#. Ett exempel är hur enkelt man skapar en associativ array (eller Hash som det heter i Ruby), vilket jag tycker är en total plåga i C#. I Ruby är dessutom allt riktiga objekt, så man kan skriva 5.times { puts 'Hello world!' }, dvs anropa en metod som hör till Integer-klassen direkt på siffran 5. Snyggt!
Ruby är inte särskilt strikt med interpunktion (eller vad man ska kalla det i programspråk), så när man ska anropa en funktion går det lika bra att skriva puts('Hello world!') som puts 'Hello world!', och raderna kan avslutas med semikolon eller inget alls. Det tycker jag är både bra och dåligt. Det stör mig lite att koden kan se inkonsekvent ut, men å andra sidan har jag större frihet att skapa mina egna konventioner. (Det gäller bara att övertyga andra utvecklare om just mina konventioners förträfflighet...)
En annan viktig skillnad är att Ruby är ett interpreterat språk istället för, som ASP.NET, kompilerat. Det gör att programmeraren inte behöver göra en kompilering varje gång någon rad ändrats, men kan också ha negativa konsekvenser på prestanda. Det har skrivits mycket om huruvida Rails verkligen kan skalas upp till "Enterprise"-nivå, och det är ingen diskussion jag tänker ge mig in på. Jag misstänker att eventuella problem blir märkbara först vid mycket stor trafik. Det finns idag flera oerhört välbesökta webbplatser som kör Rails, så det måste uppenbarligen vara möjligt.
Internationalisering
Om någon funktion inte ingår i Rails grundinstallation är sannolikheten ganska hög att någon gjort en plugin som löser problemet. En plugin installeras vanligen via ett kommando i ett terminalfönster och modifierar eller lägger till funktionalitet i Rails.
BoPunkten ska finnas på flera språk, och till det använder vi en plugin som heter Globalize. Den gör det väldigt smidigt att översätta godtyckliga texter i applikationen. Det fungerar lika bra på statiska texter i Views som på texter som lagrats i databasen, och med en väldigt liten ansträngning för mig som prgrammerare. Jag har haft ett problem, nämligen att adresserna i applikationen också ska vara lokaliserade. Det stöds inte av Globalize direkt. Det finns en annan plugin som ska lösa det, men den fick jag inte att fungera. Jag har därför fått göra en egen lösning på det som jag tänkte skriva om lite längre fram i utvecklingen.
Läs mer
Det finns en väldig massa skrivet om Ruby och Rails. Här följer några länkar till bra resurser för den som vill veta mer:
- Programming Ruby: The Pragmatic Programmer's Guide: Bra grundkurs i Ruby-programmering
- Ruby Standard API: API-dokumentation för Ruby
- Rails Framework Documentation: API-dokumentation för Rails
- Ruby on Rails wiki
- rails.se: Svensk wiki om Ruby on Rails
- Rubin på räls: Svenskt forum om Ruby on Rails




