Rubrique précédente: JBOSS, JBOSS64 : Serveur d'applications JBossRubrique suivante: TOMCAT, TOMCAT64 : serveur d'applications


ROR : serveur d'applications Ruby-on-Rails

Serveur d'applications Ruby-on-Rails

Aperçu rapide

Catalogue

System (Système)

Catégorie

Serveurs d'applications

Volumes d'utilisateur

Oui

Min. mémoire

160 Mo

SE

Linux

Contraintes

non

Présentation fonctionnelle

ROR est une appliance de serveur Web basée sur la structure Web Ruby et Ruby-on-Rails. La documentation principale de Ruby-on-Rails est disponible à l'adresse http://wiki.rubyonrails.org. Ruby-on-rails permet d'écrire de beaux codes en privilégiant la convention à la configuration. Ruby-on-rails peut fonctionner en tant que serveur Web autonome ou serveur d'applications.

ROR traite du contenu Web statique et déploie automatiquement des applications Web à partir d'un volume de contenu configurable par l'utilisateur. Les chemins d'accès aux documents sont configurables de façon à pouvoir partager le même volume entre plusieurs serveurs Web et/ou d'autres appliances avec un autre contenu.

ROR peut s'exécuter en deux modes différents : Apache/mod_passenger ou Apache/mongrel_cluster. Les deux modes ont leurs propres avantages. Ainsi, Phusion Passenger offre de très hautes performances pour les applications Rails et une fonction de redéploiement à chaud, tandis que Mongrel a une meilleure stabilité de production dans le temps.

A l'instar des serveurs de WEBx, ROR compte trois terminaux de sortie génériques prévus pour accéder à des services externes à partir de scripts sur le volume de contenu. Le terminal db permet d'accéder à diverses bases de données ; le terminal fs permet d'accéder au stockage de fichiers partagés (à l'aide de NFS) et le terminal aux est créé pour l'envoi de courriels à un serveur SMTP.

Le terminal de journal devrait être utilisé pour connecter ROR à un système de fichiers partagé dans lequel ROR peut stocker des fichiers journaux.

La configuration du serveur est définie à l'aide de diverses propriétés. Ces propriétés sont conçues pour couvrir la plupart des utilisations diverses et peuvent être configurées facilement. D'ailleurs, dans la plupart des cas, seules quelques-unes doivent être définies sur d'autres valeurs que celles par défaut.

Nom

Dernière version

SE

Version de Ruby

Version Ruby-on-Rails

Phusion Passenger

Mongrel/Mongrel_Cluster

ROR

2.0.2-1

CentOS 6.3

Ruby 1.8

2.3.4

2.2.11

1.1.5/1.0.5

Ressources

Ressource

Minimum

Maximum

Valeur par défaut

UC

0.1

16

0.3

Mémoire

160 Mo

32 Go

512 Mo

Bande passante

1 Mbit/s

2 Gbits/s

250 Mbits/s

Remarque : La quantité de la mémoire doit être configurée en fonction de la charge attendue sur ROR et de la mémoire nécessaire pour les applications déployées.

Terminaux

Nom

Direction

Protocole

Description

in

in

HTTP

Traite les requêtes HTTP provenant des clients Web. Prend en charge les protocoles HTTP/1.1 et HTTP/1.0.

db

sortie

Indifférent

Accède à un serveur de base de données. L'utilisation est définie par les scripts, quels qu'ils soient, qui résident sur le volume de contenu (le cas échéant). Si ce terminal n'est pas utilisé, il peut rester déconnecté.

fs

sortie

NFS

Accède à un système de fichiers réseau pour le stockage de fichiers partagés et fournit un accès en lecture/écriture aux fichiers via NFS. L'utilisation est définie par les scripts, quels qu'ils soient, qui résident sur le volume de contenu (le cas échéant). Le logiciel sur le volume de contenu voit s'afficher le système de fichiers distant monté en tant que /mnt/fs dans l'espace de système de fichiers de l'appliance. Si ce terminal n'est pas utilisé, il peut rester déconnecté. Le serveur connecté doit avoir un partage lecture/écriture nommé /mnt/data exporté via NFS.

log

sortie

CIFS

Accède à un système de fichiers réseau basé sur CIFS pour le stockage des journaux relatifs aux accès et aux erreurs. Si ce terminal n'est pas utilisé, il peut rester déconnecté. Le serveur connecté doit autoriser les connexions anonymes et avoir un partage exporté lecture/écriture nommé share.

aux

sortie

Indifférent

Accède à un serveur SMTP pour l'envoi de messages électroniques sortants.
Si ce terminal n'est pas utilisé, il peut rester déconnecté.

net

sortie

Indifférent

Sortie de passerelle pour l'accès au sous-réseau.
Si ce terminal n'est pas utilisé, il peut rester déconnecté.

MON

sortie

CCE

Envoie des statistiques de performances et d'utilisation des ressources à l'appliance MON.
Si ce terminal n'est pas utilisé, il peut rester déconnecté.

L'interface par défaut est activée. Elle est destinée au diagnostic et au dépannage (via SSH). Les versions futures de cette appliance peuvent désactiver l'accès SSH.

Volumes d'utilisateur

Volume

Description

content

Volume en lecture seule ou en lecture/écriture pour le stockage des applications Rails et des données des applications. Ce volume est uniquement utilisé si la propriété content_on_fs est définie sur off.

Propriétés

Nom de propriété

Type

Description

hostname

Chaîne

Nom d'hôte du site Web. Valeur par défaut : localhost

admin_email

Chaîne

Adresse électronique de l'administrateur du serveur. ROR affiche ce nom dans les pages générées automatiquement. Valeur par défaut : root@localhost

app_base

Chaîne

Répertoire racine pour les documents. Une structure typique de répertoire racine d'applications Rails doit être créée dans ce dossier (app/, config/, db/, doc/, lib/, log/, public/, script/, etc.). Si app_base est défini sur la chaîne vide, le répertoire racine du volume de contenu est utilisé. Le répertoire doit déjà exister sur le volume de contenu. Valeur par défaut : vide.

content_on_fs

Chaîne

Spécifie si le contenu concerne le système de fichiers au niveau du terminal fs ou s'il se trouve sur le volume de contenu. Valeur par défaut : off (sur le volume de contenu)

ror_backend

Chaîne

Active l'utilisation du mode Apache/Mongrel_Cluster ou Apache/Passenger. Si ror_backend est défini sur mongrel, c'est le serveur principal Mongrel_Cluster qui traitera les applications ROR au lieu de Phusion Passenger. Valeur par défaut : passenger

ror_mode

Chaîne

Mode de fonctionnement de ROR. Affecte la journalisation, la sélection de la base de données et d'autres options d'environnement. Les valeurs possibles sont les suivantes : production et development. Valeur par défaut : production

ror_port

Nombre entier

Port sur lequel le serveur Web ROR guette les requêtes HTTP entrantes. Valeur par défaut : 80

timezone

Chaîne

Spécifie le fuseau horaire utilisé dans l'appliance. Si cette propriété est vide, le fuseau horaire reste inchangé. Une liste des fuseaux horaires pris en charge est disponible ici. Valeur par défaut : vide

Propriétés ROR avancées

Il s'agit de propriétés supplémentaires qui ne doivent pas être configurées dans des circonstances habituelles. Elles peuvent être utilisées pour configurer ROR dans un environnement non standard.

Nom de propriété

Type

Description

ror_instances_per_app

Nombre entier

Nombre maximum d'instances d'application qui peuvent être actives simultanément pour une seule application. Si cette propriété est définie sur 0, le nombre d'instances pouvant être utilisées par une seule application est illimité. Autrement dit, seule la limite globale de la propriété ror_rails_max_pool_size sera appliquée (en mode Phusion Passenger uniquement ; en mode Mongrel, 0 équivaut à 2). Valeur par défaut : 0

ror_rails_use_global_queue

Chaîne

Active ou désactive l'utilisation de la mise en file d'attente globale. Si elle est désactivée, Phusion Passenger utilise l'équilibrage de charge équitable. Valeur par défaut : off

ror_rails_high_performance

Chaîne

Par défaut, Phusion Passenger est compatible avec mod_rewrite et la plupart des autres modules Apache. Toutefois, de nombreux efforts seront requis pour garantir cette compatibilité. Si vous activez la propriété ror_rails high_performance, Phusion Passenger s'exécute un petit peu plus rapidement. En contrepartie, la compatibilité avec les autres modules Apache est réduite. Valeur par défaut : off

ror_rails_max_pool_size

Nombre entier

Nombre maximum d'instances d'application Ruby on Rails ou Rack qui peuvent être actives simultanément. Si vous définissez cette propriété sur un nombre élevé, l'utilisation de la mémoire sera plus importante, mais vous disposerez d'une meilleure capacité de gestion des clients HTTP simultanés. Effectif en mode Passenger uniquement. Valeur par défaut : 6

ror_rails_max_requests

Nombre entier

Nombre maximum de requêtes traitées par une instance d'application. Après avoir traité ce nombre de requêtes, l'instance d'application est arrêtée et Phusion Passenger la redémarre. Si vous indiquez la valeur 0, aucun nombre maximum n'est défini. Autrement dit, l'instance d'application est arrêtée une fois son délai d'inactivité expiré. Cette option est utile si votre application est en proie à une fuite de mémoire. En l'arrêtant après un certain nombre de requêtes, l'ensemble de sa mémoire est libérée par le système d'exploitation. Effectif en mode Passenger uniquement. Valeur par défaut : 0

ror_mongrel_start_port

Nombre entier

Numéro du port de démarrage dans la plage de ports utilisée par mongrel_cluster. Valeur par défaut : 3000

Propriétés Apache avancées

Il s'agit de propriétés supplémentaires ne devant généralement pas être configurées. Elles peuvent être utilisées pour configurer ROR dans des circonstances non standard.

Nom de propriété

Type

Description

max_connections

Nombre entier

Nombre maximal de connexions simultanées autorisées. Lorsque ce nombre est atteint, les nouvelles connexions sont toujours acceptées, mais leur traitement est différé jusqu'à la fermeture d'une autre connexion. La valeur max_connections ne peut pas être définie sur une valeur supérieure à 256.
Valeur par défaut : 128

persistent_connections

Chaîne

Contrôle si ROR permet aux clients de demander plusieurs documents sur la même connexion. Les valeurs autorisées sont on et off. Vous devrez peut-être désactiver les connexions persistantes mais uniquement si vous rencontrez des problèmes avec les clients qui ne prennent pas en charge HTTP/1.1 correctement et ne souhaitez pas repasser à HTTP/1.0. Valeur par défaut : on

idle_timeout_sec

Nombre entier

Délai en secondes de maintien d'une connexion client en l'absence de requêtes ou de réponses. Cette propriété est utilisée uniquement si persistent_connections est défini sur on. La définition d'un délai d'expiration court permet de clôturer rapidement les connexions oubliées. Valeur par défaut : 15

data_timeout_sec

Nombre entier

Délai en secondes pour la réception ou l'envoi d'une quantité de données plus importante si un transfert de données a démarré sans se terminer. Ce délai d'expiration permet à ROR de clôturer des connexions oubliées tout en permettant de prolonger le transfert. Par défaut : 300

info_level

Chaîne

Contrôle la quantité d'informations que ROR dévoile sur lui-même aux clients Web (dans les réponses HTTP et dans les pages automatiquement générées). Les valeurs autorisées sont les suivantes : full (le plus d'infos), os, minor, major, prod (le moins d'infos). Par mesure de sécurité, nous vous recommandons de dévoiler les informations minimales. Default prod

Propriétés de journalisation

Nom de propriété

Type

Description

logs_enabled

Chaîne

Active ou désactive complètement la journalisation. Valeur par défaut : off

logs_base_dir

Chaîne

Répertoire de stockage des journaux de ROR. Cette propriété n'a aucun effet si la propriété =logs_enabled est définie sur off. Valeur par défaut : /

error_log_filename

Chaîne

Nom de fichier du journal d'erreurs, par rapport au système de fichiers accessible sur le terminal de journal. Le nom peut inclure des noms de répertoire. Pour voir des exemples, consultez access_log_filename. Si cette propriété est définie sur une valeur vide ou si la propriété logs_enabled est définie sur off, le journal d'erreurs est écrit dans un fichier sur le système de fichiers racine de l'instance ROR proprement dite. Cette propriété n'a aucun effet si la propriété logs_enabled est définie sur off. Valeur par défaut : vide.

error_log_level

Chaîne

Niveau de sévérité des messages à écrire dans le journal d'erreurs. Les valeurs autorisées sont debug, info, notice, warn, error, crit, alert et emerg. debug écrit la plupart des messages, tandis qu'emerg n'écrit que les messages d'urgence. Valeur par défaut : warn

access_log_filename

Chaîne

Nom de fichier du journal d'accès, par rapport au système de fichiers accessible sur le terminal de journal. Par exemple, access_log. Le nom peut inclure des noms de répertoire, par exemple, /srv1_logs/access_log ou /logs/srv1_access_log. Si cette propriété est définie sur une valeur vide, le journal d'accès n'est pas créé. Si les répertoires n'existent pas, ils seront créés. Cette propriété n'a aucun effet si la propriété logs_enabled est définie sur off. Valeur par défaut : vide.

Remarques :

Bases de données externes

ROR prend actuellement en charge les stockages de données externes MySQL, PostgreSQL et Microsoft SQL Server pour les applications Rails. Il suffit de définir correctement un adaptateur et des informations d'identification d'utilisateur de base de données dans le fichier de configuration d'application Rails (database.yml).

Microsoft SQL Server est pris en charge à l'aide du projet d'adaptateur rails-sqlserver (http://rails-sqlserver.lighthouseapp.com/projects/20277-sql-server-05-adapter/tickets).

Exemple de configuration d'adaptateur rails-sqlserver (application/config/database.yml) :

Production :
  Adaptateur : sqlserver
  Mode : odbc
  dsn: Driver=FreeTDS;Server=db;Database=YOUR_DATABASE_NAME;Uid=USER_LOGIN;Pwd=USER_PASSWORD
Compteurs personnalisés

L'appliance ROR signale les compteurs personnalisés suivants via le terminal mon. Ces compteurs appartiennent au groupe de compteurs ROR :

Nom du compteur

Description

Total hits

Nombre total d'occurrences

Total bytes

Nombre total d'octets

Active requests

Nombre de requêtes actives

Idle servers

Nombre de serveurs inactifs

Rails memory

Mémoire totale utilisée par Rails (mode Passenger uniquement)

Rails applications

Nombre d'instances d'application qui sont actuellement actives (mode Passenger uniquement)

Active applications

Nombre d'instances d'application qui traitent actuellement des requêtes (mode Passenger uniquement)

Idle applications

Nombre d'instances d'application qui ne traitent actuellement pas de requêtes, autrement dit, qui sont inactives * (mode Passenger uniquement)

Rails sessions

Affiche, pour l'ensemble des instances d'application, le nombre de clients HTTP qui sont actuellement en attente de traitement (mode Passenger uniquement)

Rails requests

Indique le nombre de requêtes traitées jusqu'à présent par l'ensemble des instances (mode Passenger uniquement)

Remarque : Les instances d'application inactives sont arrêtées au bout d'un certain temps, que vous pouvez spécifier à l'aide de la propriété data_timeout_sec (sauf si cette valeur est définie sur 0, auquel cas les instances d'application ne sont jamais arrêtées sur la base du temps d'inactivité). La valeur d'inactivité est égale au compte - activité.

Erreurs de démarrage possibles

En cas d'échec de démarrage de l'appliance, les erreurs suivantes peuvent être consignées dans le journal système :

Message d'erreur

Description

ERROR: Logs are enabled, but log terminal is not connected.

Le terminal de journal n'est pas connecté, mais logs_enabled ou enable_access_log est défini sur yes.

ERROR: Property content_on_fs is 'off' but the local content volume is missing.

content_on_fs est défini sur off, indiquant que le volume de données doit être monté localement, mais ROR ne parvient pas à monter le volume de contenu. Dans ce cas, il est fort probable que le volume de contenu n'est pas formaté ou n'est pas défini dans les propriétés de ROR.

ERROR: Failed to mount nfs share.

ROR ne peut pas monter le partage NFS. Il est probable que le système de fichiers n'est pas connecté ou que ROR a été démarré avant NAS (ou qu'une appliance est connectée au terminal fs).

Messages de tableau de bord

Message

Description

L'espace disponible sur le disque de stockage des données est inférieur à 5 %.

L'espace disponible sur le volume de données dont l'accès s'effectue via le terminal fs est inférieur à 5 %. Il est conseillé d'augmenter la taille du volume.

L'espace disponible sur le disque de stockage des données est inférieur à 1 %.

L'espace disponible sur le volume de données dont l'accès s'effectue via le terminal fs est inférieur à 1 %. Faites attention car vous risquez de perdre des données.

L'espace disque disponible sur le volume de contenu est inférieur à 5 % .

L'espace disque disponible sur le volume de contenu de l'appliance est inférieur à 5 %. Il est conseillé d'augmenter la taille du volume.

L'espace disque disponible sur le volume de contenu est inférieur à 1 % .

L'espace disque disponible sur le volume de contenu de l'appliance est inférieur à 1 %. Faites attention car vous risquez de perdre des données.

Performances

Les performances de ROR peuvent être affectées lorsque la journalisation est activée (logs_enabled = on). Le tableau ci-dessous contient des résultats d'évaluation de performances (exprimés en rps, requêtes par seconde) obtenus lorsque les journaux sont désactivés avec l'utilitaire Apache Benchmark fourni avec Apache Web Server version 2.0 et 2.2. Pour plus d'informations sur Apache Benchmark, reportez-vous au site Web d'Apache. Les paramètres suivants ont été utilisés pour l'évaluation des performances : "bw=500M mem=2G cpu=2".

simultanéité

rps

simultanéité sur 1 client

1700-2100 rps

simultanéité sur 10 clients

7100-7500 rps

simultanéité sur 100 clients

7700-8100 rps

Utilisation standard

Le diagramme suivant présente une utilisation standard de l'appliance ROR. ROR traite les applications du volume de contenu.

Exemple 2 d'utilisation de ROR

Appliances en cours d'utilisation :

Nom de propriété

Valeur

Notes

hostname

www.mysite.org

Nom d'hôte du site.

app_base

MyApp

 

content_on_fs

off

ROR utilise le contenu du volume d'utilisateur pour l'ensemble du contenu.

timezone

EST

Fuseau horaire EST.

ror_port

80

Port standard pour le protocole HTTP.

Les requêtes client arrivent sur la passerelle client. La passerelle envoie les requêtes au serveur AppServer ROR, qui les traite.

Application à deux niveaux avec base de données, journal et surveillance

Le diagramme suivant présente une utilisation standard de l'appliance ROR avec base de données, journal, surveillance et contenu sur un stockage réseau.

Exemple 2 d'utilisation de ROR

Appliances en cours d'utilisation :

Exemple de configuration de propriété :

Nom de propriété

Valeur

Notes

hostname

www.mysite.org

Nom d'hôte du site.

app_base

MyApp

 

content_on_fs

on

ROR utilise le stockage distant via le terminal fs pour l'ensemble du contenu.

timezone

EST

Fuseau horaire EST.

ror_port

80

Port standard pour le protocole HTTP

max_connections

200

Max de 200 utilisateurs simultanés

logs_enabled

Oui

Active les journaux d'erreurs

logs_base_dir

MyApp_Log_Dir

 

error_log_level

info

 

error_log_filename

error_log

Nom du journal d'erreurs

access_log_filename

access_log

Nom du journal d'accès

La requête client arrive sur la passerelle client. La passerelle envoie les requêtes au serveur AppServer, qui les traite. Le contenu et les journaux se trouvent sur l'appliance de stockage. Les compteurs sont signalés à l'appliance MON.

Remarque : Les applications RoR peuvent utiliser de nombreux types de bases de données. ROR permet de connecter toute appliance de base de données à son terminal db.

Site Web évolutif activé pour RoR

Le diagramme suivant présente une utilisation standard de l'appliance ROR avec équilibrage de charge.

Exemple 3 d'utilisation de ROR

Appliances en cours d'utilisation :

Exemple de configuration de propriétés pour AppServer1 et AppServer2 :

Nom de propriété

Valeur

Notes

content_on_fs

off

ROR utilise le contenu du volume d'utilisateur pour l'ensemble du contenu

timezone

EST

Fuseau horaire EST.

Les autres paramètres sont définis sur leurs valeurs par défaut.

La requête client arrive sur la passerelle client. La passerelle envoie les requêtes à l'équilibreur de charge lb, qui les transmet à un des serveurs AppServer1 et AppServer2.

Logiciels tiers et libres utilisés au sein de l'appliance

ROR utilise les packages libres et tiers suivants en plus de l'installation de base de LUX6.

RPM

Logiciel

Version

Modifié

Licence

apr

1.3.9-5.el6_2

Non

Apache Software License 2.0

apr-util

1.3.9-3.el6_0.1

Non

Apache Software License 2.0

e2fsprogs

1.41.12-12

Non

GPLv2

e2fsprogs-libs

1.41.12-12

Non

GPLv2

freetds

0.91-1

Non

GPLv2

glibc

2.12-1.80.el6_3.6

Non

LGPL

glibc-common

2.12-1.80.el6_3.6

Non

LGPL

httpd

2.2.15-15

Non

Apache Software License 2.0

keyutils-libs

1.4-4

Non

LGPL

krb5-libs

1.9-33.el6_3.3

Non

MIT, distribution libre

libgcc

4.4.6-4

Non

GPLv2

libgomp

4.4.6-4

Non

GPLv2

libselinux

2.0.94-5.3

Non

Domaine public (non soumis au copyright)

libselinux-python

2.0.94-5.3

Non

Domaine public (non soumis au copyright)

libstdc++

4.4.6-4

Non

GPLv2

mailcap

2.1.31-2

Non

Domaine public (non soumis au copyright)

MySQL

5.1.66-2.el6_3

Non

GPLv2

nfs-utils

1.2.3-26

Non

GPLv2

openldap

2.4.23-26.el6_3.2

Non

OpenLDAP

openssl

1.0.0-25.el6_3.1

Non

BSD-like

perl-DBI

1.609-4

Non

GPL

pkgconfig

0.23-9.1

Non

GPLv2

postgresql

8.4.13-1.el6_3

Non

BSD

postgresql-libs

8.4.13-1.el6_3

Non

BSD

ruby

1.8.7.352-7.el6_2

Non

GPL/Licence Ruby - voir COPIE

ruby-devel

1.8.7.352-7.el6_2

Non

GPL/Licence Ruby - voir COPIE

ruby-irb

1.8.7.352-7.el6_2

Non

GPL/Licence Ruby - voir COPIE

ruby-libs

1.8.7.352-7.el6_2

Non

GPL/Licence Ruby - voir COPIE

ruby-rdoc

1.8.7.352-7.el6_2

Non

GPL/Licence Ruby - voir COPIE

unixODBC

2.2.14-12.el6_3

Non

LGPL

Sources d'installation

Logiciel

Version

Modifié

Licence

2000-2005-adapter

2.2.22.cb0c5ea

Non

MIT

mysql-ruby

2.8.2

Non

Licence Ruby

rubygems

1.3.6

Non

Licence Ruby

GEM

Logiciel

Version

Modifié

Licence

actionmailer

2.3.4

Non

MIT

actionpack

2.3.4

Non

MIT

activerecord

2.3.4

Non

MIT

activeresource

2.3.4

Non

MIT

activesupport

2.3.4

Non

MIT

capistrano

2.5.9

Non

Licence consortium MIT/X

cgi_multipart_eof_fix

2.5.0

Non

Licence Ruby

démons

1.0.10

Non

Licence Ruby

dbd-odbc

0.2.5

Non

BSD

dbi

0.4.3

Non

BSD

désapprouvé

2.0.1

Non

BSD

fastthread

1.0.7

Non

Licence Ruby

ferret

0.11.6

Non

Licence consortium MIT/X

gem_plugin

0.2.3

Non

Licence Ruby

highline

1.5.2

Non

GPL/Licence Ruby

mongrel

1.1.5

Non

Licence Ruby

mongrel_cluster

1.0.5

Non

Licence Ruby

rake

0.8.4

Non

Licence Ruby

net-scp

1.0.2

Non

GPL/Licence Ruby

net-sftp

2.0.3

Non

Licence BSD/Ruby

net-ssh

2.0.15

Non

Licence BSD/Ruby

net-ssh-gateway

1.0.1

Non

Licence BSD/Ruby

net-ssh-multi

1.0.1

Non

Licence BSD/Ruby

passenger

3.0.17

Non

GPLv2

pg

0.8.0

Non

Licence Ruby

rails

2.3.4

Non

Licence Ruby

rake

0.8.7

Non

Licence consortium MIT/X

sqlite3-ruby

1.2.5

Non

BSD