Table of Contents

How to Rails

Starten met een Rails-project kan wat verwarrend zijn als je dit nog nooit eerder gedaan hebt. Dit artikel bevat een overzicht tot de benodigde software en de stappen waarin je deze best installeert.

1. Ruby

Mac & Linux

Rails is een Ruby web framework en vereist dan ook een Ruby installatie. Omdat verschillende projecten verschillende Ruby versies kunnen gebruiken is het handig meerdere Ruby versies naast elkaar te kunnen draaien. Wij raden rbenv aan aangezien het een stuk eenvoudiger (en probleemlozer werkt) dan rvm. Rbenv installeer je op de volgende manier:

Op beide platformen moet rbenv worden opgestart bij het openen van de shell, dit kan op de volgende manier (vervang .bash_profile door je favoriete shell zijn profile of rc):

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Na installatie en herladen van de shell zou type rbenv rbenv is a function of iets dergelijks moeten geven.

Het installeren van een nieuwe Ruby versie kan aan de hand van rbenv install [versie] (bv. rbenv install 2.2.2). De volledige lijst van mogelijke versies kan bekomen worden aan de hand van het commando rbenv install -l.

Rbenv zal normaal de globaal ingestelde Ruby versie gebruiken, tenzij de gebruiker (of het project) een andere versie specifieert door middel van een .ruby-version bestand met daarin het versienummer. Dit laatste kan door rbenv shell [versie] worden overschreven voor de huidige shell sessie. De globale Ruby versie kan worden aangepast door rbenv global [version].

Sommige Ruby versions kunnen bij het builden beginnen klagen over het niet gedefinieerd zijn van `SSLv3_method`. De fix hiervoor kan men vinden op de Arch wiki.

Windows

Rbenv op Windows wordt niet gedaan, de installatie van Ruby kan via RubyInstaller for Windows.

2. Bundler

Net zoals rbenv de versie van je Rails project beheert, beheert Bundler per project de verschillende versies van dependencies en gems. Wanneer bijvoorbeeld twee verschillende projecten twee verschillende versies van dezelfde gem gebruiken, zorgt Bundler dat deze netjes naast elkaar kunnen gebruikt worden.

Installatie van Bundler is zo simpel als gem instal –user-install bundler. Houd er rekening mee dat geïnstalleerde gems afhankelijk zijn van de door rbenv geactiveerde Ruby, het kan dus zijn dat je dit commando opnieuw moet uitvoeren na het installeren van een nieuwe Ruby versie.

Gems worden per project gespecifieerd in de Gemfile. Meer informatie over deze Gemfile kan hier worden verkregen.

3. Projecten

Wanneer je een werkende rbenv en bundler setup hebt kan je beginnen aan een project:

  1. Clone hiervoor eerst de repository van Git,
  2. Controleer of de versie gespecifieerd in .ruby-version lokaal geïnstalleerd is,
  3. Installeer die versie wanneer dit niet het geval is,
  4. Installeer via bundle install –without production de benodigde dependencies uit de Gemfile,
  5. Voer bundle exec rake db:setup uit om het databankschema en de seeds in te laden,
  6. Start de Rails server in development op via rails s,
  7. Nagiveer in je browser naar localhost:3000.

Wanneer bij stap 4 fouten optreden is dit waarschijnlijk omdat de gem een system library nodig heeft, vaak voorkomende zijn:

Gem System dependency
Nokogiri zlib1g-dev
Rmagick imagemagick

4. Deployment

Wanneer wijzigingen zijn gemaakt wil je die natuurlijk ook op de server zetten. Hiervoor gebruiken we Capistrano. Capistrano is een deployment tool die alle commando's vanaf je computer via SSH op de server uitvoert. Dit zorgt ervoor dat je niet op de server zelf moet inloggen om nieuwe wijzigingen online te zetten en verlaagt de kans op fouten. Deployen kan simpelweg via het commando cap production deploy. Na het deployen worden nodige services herstart, zodat de wijzigingen meteen live staan.

Capistrano zet de applicatie in production/current. Oude releases zijn beschikbaar in submappen onder production. Mocht er een bug optreden in een nieuwe release kan je via Capistrano gemakkelijk terug naar een oude versie van de code via het commando cap production deploy:rollback.

Als de delayed-job queue (onder andere gebruikt in FK-enrolment) stilvalt, dan kan deze herstart worden met cap production delayed_job:restart.

Aangezien alle commando's via ssh worden uitgevoerd dien je toegang te hebben tot de server. Hiervoor werken we via ssh-keys. Als je toegang wil om een bepaalde applicatie te deployen kan je terecht bij admin@zeus.ugent.be met de naam van de applicatie, waarom je toegang wil en je public key.

5. Debugging

Vaak gaat het eens mis, en dan is het belangrijk dat je live op de server kan debuggen. Rails biedt hier enkele handige tools voor aan, zoals de Rails console. De Rails console laat je toe om met je Rails applicatie om te gaan vanaf de command line. Het is mogelijk om modellen en variabelen op te vragen, methodes op objecten uit te voeren, etc. Dit zorgt ervoor dat je (normaalgezien) nooit rechtstreeks met de databank moet prutsen om data terug in orde te krijgen en verlaagt de kans op fouten en inconsistenties. De Rails console kan je openen op de server via het commando bundle exec rails c production in de production/current folder.

Logbestanden van de webserver zijn terug te vinden in de log/access.log en log/error.log bestanden. De Rails log staat in production/current/log/production.log.

Optioneel

CAS-integratie

Enkele applicaties zoals FK-Enrolment en Gandalf steunen op CAS-integratie. Aangezien DICT de toelating voor localhost:3000 gedisablet heeft is wat meer werk nodig om deze lokaal werkend te krijgen. Kort gezegd moet het adres van de applicatie overeenkomen met wat in DICT hun databank staat. Om te kunnen integreren met CAS moet je voor deze applicaties de volgende stappen volgen:

  1. Voeg in /etc/hosts de volgende lijn toe: 127.0.0.1 [url] waarbij [url] het bijhorende URL bevat in onderstaande tabel,
  2. Wanneer dit niet het geval is, start de Rails server op 127.0.0.1 via rails s -b 127.0.0.1 (sommige Rails webservers starten de applicatie op localhost ipv 127.0.0.1 wat niet zal werken),
  3. Surf naar [url]:3000.

Je browser zal nu het url opzoeken en in je /etc/hosts file zien dat dit hoort bij localhost, zodat je op je lokale Rails server terecht komt. Aangezien onderstaande URLs geregistreerd zijn bij DICT zullen die ook worden toegelaten en kan je zo de CAS-integratie gebruiken.

Project CAS-url
Gandalf dev.event.fkgent.be
FK-Enrolment dev.registratie.fkgent.be