Je souhaite mettre en service une application Ruby on Rails

De PHPnet Wiki.

Sommaire

Mettre en service une application Ruby on Rails dans le cadre de l'offre Premium de PHPNET

Les tutoriaux permettant de créer un premier environnement rails se trouvent aisément sur le web. Pour l'utilisateur qui suit les instructions et qui dispose déjà de MySQL, il est simple et rapide de faire fonctionner en local une application qui fonctionne et de la faire évoluer par la suite en fonction de ses propres besoins. Ensuite, cet utilisateur pourra décider de faire héberger son service.
D'autres utilisateurs choisiront immédiatement une offre hébergée afin de ne pas avoir eux-mêmes à installer quoi que ce soit sur leur propre pc.

Quelle que soit l'option retenue, la question qui finit par se poser est de savoir comment passer des instructions obtenues sur un tutorial, et peut-être expérimentées avec succès sur un serveur local, à l'environnement PHPNET.
En effet, les tutoriaux sont généraux et ne prennent pas en compte les caractéristiques propres à l'hébergeur. Il s'ensuit que le service risque de ne pas fonctionner et de ne fournir aucun log.

Voici identifiés ci-dessous quelques points à vérifier avant une mise en service.

Quel répertoire ?

L'offre PHPNET habitue l'utilisateur à placer son contenu dans le répertoire 'www' ; mais si le contenu est destiné à fonctionner sous Ruby on Rails, le répertoire est spécifique, il est au même niveau que www et s'appelle tout simplement 'rails'.

Si le contenu n'est pas dans ce répertoire, il ne pourra pas être executé.

Créer l'environnement.

Imaginons que notre projet s'appelle 'recette', on se connecte en SSH et on tappe :

mkdir rails/recette #crée le répertoire recette dans le sous répertoire recette
cd rails/recette #on se déplace vers le répertoire recette situé dans le répertoire rails
rails recette #on crée le projet rails

Ceci crée automatiquement des fichiers et répertoires de base du projet.

Adresse de pointage

Lorsque l'on passe par PHPNET pour pointer sur un contenu, le répertoire de contenu par défaut est déjà fourni : c'est justement 'www', dans lequel il est possible de créer des sous-répertoires si nécessaire.

Pour pointer sur 'rails/recette' et non sur 'www/quelquechose', il suffit d'indiquer de sortir de www : Pour cela, ajouter /../rails à la suite de www, ce qui signifie 'entrer dans www' puis 'sortir de www' puis 'entrer dans rails' Exemple : site : essai.com,
Accéder à l'administration des services de PHPNET et à la suite de 'dossier de pointage /home/www' , saisir '/../ rails/recette/'

Faire démarrer le serveur

rails fonctionne, sauf instruction contraire, avec son propre serveur web, nommé 'mongrel'.
Pour le faire démarrer, il faut lancer une instruction 'ruby script/server'.

Mais, si on ne précise rien, cela fait démarrer le serveur en local, à l'adresse 127.0.0.1, inaccessible depuis l'extérieur.

Il faut donc préciser que l'on veut le rendre accessible de l'extérieur à l'adresse IP de son serveur. Pour cela, il faut lancer l'instruction suivante (imaginons que l'adresse ip est 1.2.3.4) :

ruby script/server -b 1.2.3.4

Test : Consulter le site par le Web : point à voir

La consultation doit lancer automatiquement la page d'index qui a été créée par défaut par rails.
Là encore il y a un risque de frustration car il peut y avoir confusion dans les formats.
Actuellement, il semble qu'il y ait un petit souci de paramétrage. Nous ne pouvons avoir immédiatement une page web, passons à l'étape suivante :

Afficher sa page d'accueil 'hello world'

Nous entrons dans ce qui fait la spécificité de rails. Les utilisateurs qui sont à ce stade savent certainement déjà qu'il s'agit d'un modèle mvc, pour model view controller (modèle vue contrôleur) et que lorsque l'internaute appelle une page, la requête passe d'abord par le contrôleur du modèle en question qui va effectuer éventuellement des traitements avant de commander l'affichage d'une page web.

Exemple:
Il nous faut d'abord créer un modèle, appelons-le user. Se placer dans le répertoire que nous avons créé : recette.

Pour créer le modèle :

ruby script/generate model User

Ensuite nous créons le controlleur :

ruby script/generate controller User

Le contrôleur définit une série d'instructions avant de conduire à l'affichage d'une page web. Nous allons créer un service minimum d'affichage de la page hello world.

Modification de user_controller.rb

Il faut éditer 'app/controllers/user_controller.rb' qui n'a que deux lignes pour l'instant : Nous ajoutons entre la première et la dernière ligne

def index
end

Aller dans /app/views/user

Créer 'index.html.erb' avec pour contenu :

<html>
Hello world
</html>

Essai.com dirigé vers la page 'hello world'

Nous allons maintenant demander à ce que les visites à l'adresse Web essai.com soient dirigées vers cette page Hello world que nous venons de créer : Pour cela nous configurons la route par défaut : Ecrire dans config/routes.rb :

map.root :controller => "user" , :action => "index"

De façon simpliste, nous pourrions dire que l'instruction qui est lue par le système lorsqu'il s'agit d'afficher 'http://www.essai.com/' est de faire ce qui est défini comme route par défaut (root), soit :consulter le contrôleur 'user' et lui demander quelle est l'instruction pour index. Nous n'avons mis aucune instruction pour index, mais l'action existe et renvoie à la page index que nous avons créée : index.html.erb

Test

http://www.essai.com:3000/ Il devrait s'afficher 'Hello world'. Remarque : Le serveur web attaché à rails fonctionne sur le port 3000 ; le port habituel, celui qu'il n'est pas nécessaire de spécifier car il est standard est le port 80 est déjà utilisé par le serveur Apache permettant d'acceder aux sites n'étant pas en Ruby on Rails.