Framework de Programmation des Serveurs Web

Initiation à Ruby on Rails (RoR)

Olivier Dalle (@unice.fr)

Université de Nice Sophia Antipolis

Chapitre 1 : Introduction, mise en place

Le chapitre en bref:

  • Installation
    • vmware + Ubuntu
    • curl, rvm
    • ruby 1.8.7 puis 1.9.2
    • rails
  • Permière app
    • Création, configuration
    • Utilisation


Vmware + Ubuntu 12.04 LTS


Droits administrateur indispensable

→ Donc machine virtuelle linux.

Mais pas le temps de tester sur toutes les distrib → Ubuntu (choix arbitraire)

Normalement vm préinstallée sur machines de la fac.

Au pire: Google ubuntu...

Curl


Outil de téléchargement en ligne de commande.

Installation:

$ sudo apt-get install curl

Rvm


Ruby Version Manager

Indispensable pour éviter de se noyer dans les versions de ruby!

$ curl -L get.rvm.io | bash -s stable

Puis lire fichier de configuration (voir output préced.)

$ source /home/<login>/.rvm/scripts/rvm 

Rvm (suite)


Attn: rvm update devenu obsolete

Remplacé par

$ rvm get stable

Installation Ruby 1.8.7 (optionnel)


$ rvm install 1.8.7 

Affiche message avec instructions suivantes:

rvm install 1.8.7 # installs patch 357: closest supported version
    rvm system ; rvm gemset export system.gems ; rvm 1.8.7 ; rvm gemset import system.gems # migrate your gems
    rvm alias create default 1.8.7
[…]
And then press ‘q’ to continue…

Appuyez sur q!

Installation Ruby 1.8.7 (optionnel)


$ rvm install 1.8.7 

Sur Linux (Ubuntu 12.04 LTS), demande d’exécuter:

$ sudo /usr/bin/apt-get install build-essential openssl \
libreadline6 libreadline6-dev curl git-core zlib1g \
zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev \
sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev \
ncurses-dev automake libtool bison subversion pkg-config

Soit! Il suffit de copier/coller dans terminal…

Installation Ruby 1.9.2


$ rvm install 1.9.2 

Attendre, ca peut prendre quelques minutes…

Puis créer les Gemset et faire de 1.9.2 la version par défaut:

$ rvm --create 1.8.7@rails2tutorial
$ rvm --create 1.9.2@rails3tutorial
$ rvm --default use 1.9.2@rails3tutorial 
$ gem update --system

Installation rails 3.x


Le livre recommande 3.0.1, mais nous allons choisir la dernière 3.0.x → 3.0.17

$ gem install rails --version 3.0.17

Confirmation:

$ rails --version
Rails 3.0.17

Création première Application


$ mkdir rails_project
$ cd rails_project
$ rails new first_app

Création première Application


Editer le fichier Gemfile

Edition Gemfile


$ gedit Gemfile 

Le livre demande d’ajouter deux lignes sqlite3 et sqlite3-ruby mais cela a changé dans 3.0.17, une seule suffit:

(Gemfile) gem 'sqlite3', "~> 1.3.6" 

Puis

$ bundle install

Démarrage du serveur


Executer:

$ rails server

Ouvrir la page
d’accueil dans
son navigateur
favori:

Accueil_Permiere_App

Git


Gestion de version très élaboré

Première configuration de Git


Une fois pour toutes:

$ git config --global user.email olivier.dalle@unice.fr
$ git config --global alias.co checkout
$ git config --global core.editor "gedit -w"

Dans le répertoire du projet (pour chaque App):

$ git init

Mettre à jour le .gitignore


$ gedit .gitignore

Modifier comme suit:


	.bundle
	db/*.sqlite3
	log/*.log
	*.log
	tmp/
	tmp/*
	tmp/**/*	


	tmp/**/*
	doc/api
	doc/app
	*.swp
	*~
	.DS_Store

Prise en compte des nouveaux fichiers


Recherche et ajout des fichiers encore non pris en charge par git (Staging area):

$ git add .

Afficher l’état de la Staging area:


$ git status

Sauvegarde Staging Area


Sauvegarder définitivement la Staging area:
$ git commit -m "Import initial."

Retrouver les messages associés aux versions successives:

$ git log
commit 00db7014c4c398290581d496bb014fac51cd3aef
Author: devel <olivier.dalle@unice.fr>
Date:   Fri Sep 7 15:00:42 2012 +0200

Initial commit

Exemple de récupération avec Git


Maladroitememnt, vous avez fait rm -rf app/controllers

Git vous permet de récupérer la dernière version avec
$ git checkout -f

Exemple:

$ rm -rf app/controllers
$ git status
$ git checkout -f
$ git status
$ ls app/controllers/

GitHub


Un dépôt git public, gratuit sous condition

On suppose que vous vous êtes inscrit…

Céer une copie distante sur Github sous le nom origin:

$ git remote add origin \
> git@github.com:<username>/first_app.git

Puis sauver la copie locale sur le dépôt:
$ git push origin master

Branch, edit, commit, merge


Le cycle de vie du développement avec Git:

  1. Branch: crée un embranchement (copie) dans l’arbre des versions
    • Une branche de travail, pour développer les nouveaux sous-projets
  2. Edit: faire les modifications dans la branche de travail
    • préserve la branche principale (master)
    • la branche principale est toujours dans un état stable

Branch, edit, commit, merge


Le cycle de vie du développement avec Git:

3. Commit: sauver les modifications au fur et à mesure dans la branche de travail

4. Merge: fusionner la branche de travail avec la branche principale

Gitk: Visualisation des branches & fusions

gitK

Création d’une branche git


Checkout avec le drapeau -b :

$ git checkout -b modify-README

Voir les branches existantes (* devant la branche courante):

$ git branch
master
* modify-README

Edition


Par exemple transformer le README en fichier au format Markdown:

$ git mv README README.markdown
$ gedit README.markdown

Format markdown?

Un titre de niveau 1
====================

Ceci est un [*lien vers la page unice*](http://www.unice.fr/)...

Commit (sauvegarde)


Voir si des choses ont changé avec

git status

Sauvegarder les changements … sans oublier les nouveaux fichiers!

On peut utiliser git add . ou simplment le flag -a de git commit:

$ git commit -a -m "Amelioration du README"

Merge (fusion)


Fusion = rejouer les modifications de la branche de travail dans la branche principale (master):

  1. basculer dans la branche principale
    $ git checkout -b master
  2. exécuter la fusion (merge)
    $ git merge modify-README

Couper une branche (morte)


Couper une branche devenue inutile:

$ git branch -d modify-README

(ou flag -D pour supprimer une branche sans la sauvegarder)

Sauver dans le dépôt

Quand la branche principale a subi des changements majeurs, on peut vouloir en faire profiter la communauté:

$ git push

Déploiemnt avec heroku


Heroku: service spécialisé dans l’hébergement d’Apps RoR

<pre>http://www.heroku.com/</pre>

Configuration Heroku


Installer le paquetage ruby (gem):

$ [sudo] gem install heroku

Créer un compte sur leur site. Puis, installation clefs ssh:

heroku keys:add

Création d’une App sur Heroku:

$ heroku create
$ git push heroku master
$ heroku open