Salut,
je suis en train de traduire cet article afin que mon hébergeur puisse
m’installer RoR sur mon serveur dédié. j’aimerais avoire une relecture
car
- Je suis une bosse dans l’administration de serveur
- Car parfois je dois traduire de travers
Merci
RoR sur IIs
Bon Il vaut faut tout d’abord
- Ruby
Installerhttp://rubyforge.org/frs/download.php/4174/ruby182-15.exe,
(1.8.4) - Rails
frameworkhttp://rubyforge.org/frs/download.php/7655/rails-1.0.0.zip
(1.1) - Ruby DBI-ADO interface http://ruby-dbi.rubyforge.org/ (si vous
utilisez SQL Server), - Ruby for IIS http://rubyforiis.sosukodo.org/,
- FastCGI for IIS http://www.caraveo.com/fastcgi/,
- Ionic ISAPI
Rewriterhttp://cheeso.members.winisp.net/dl/IonicIsapiRewriter.zip
.
Description :
Ruby est un langage de programmation interprété entièrement orienté
objethttp://fr.wikipedia.org/wiki/Programmation_orientée_objet
.
Ruby on Rails (RoR) est un framework pour écrire des applications web.
L’ interface DBI-ADO est necessaire pour un seul fichier " ADO.rb" qui
permet au “conecteur SQL Server” de se connecter à MS-SQL.
Ruby for IIS est de créer un processus d’installation pour faciliter
les
applications web sur les serveurs IIS
FastCGI garde un certain nombre de processus de Ruby/Rails fonctionner
dans
IIS. En gros quand une demande viens du client vous n’avez pas besoin de
commencer un nouveau Ruby processus chaque fois. Au lieu de cela
FastCGI commence
des processus N et si tous sont occupés il en recommence un autre,
jusqu’Ã
un maximum des processus M et conduit les demandes vers n’importe quel
processus libre.
Lonic Rewriter prends un url ’ Rails-friendly’ (controller/action/id) et
le
récris dans une forme compréhensible pour IIS. IIS ensuite dispaches ce
nouvel URL Ã FastCGI qui le passe dans ruby
Ok, Let’ Go !
Vous avez installé Rails (dans C:\Ruby) et copié les fichiers de
l’'application (dans D:\MyApp). Vous avez ajouté le framework Rails
dans le
dossier ‘vendor’ de l’application (D:\MyApp\vendor)
Nous faisons ceci car nous allons altérés certains fichiers du Framework
et
nous voulons garder nos changements (dans D:\MyApp\vendor) séparé de
l’installation de RoR (dans C:\ruby\lib\ruby\gems\1.8\gems).
Ensuite vous devez alors extraire ADO.rb à partir du dossier de DBI et
le
placer dans C:\ruby\lib\ruby\site_ruby\1.8\DBD -
Vous devrais créer un dossier ADO et placer le fichier dans celui ci.
Apres, modifier le fichier de configuration de votre application et
ajouter
cette ligne
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:tmpdir] =
'D:\Temp\
Vous devrez créer un dossier Temp dans D : ou votre application
silencieusement ne fonctionnera pas. Ce point doit forcer Rubis de
placer
ses fichiers sessions dans dossier connnu (?).
Maintenant lancer votre applications sous WEBrick. C’est essentiel. Si
elle
fonctionne pas ici , elle ne ne fonctionnera pas sous IIS.
Copier vos fichiers ISAPI dans un endroit sûr (J’ai tendance a les
mettre
dans C:\InetPub ) ils sont associés à IIS mais non disponible au
public.
Donc copier vos fichiers FastCGI.DLL , IsapiRewrite4.DLL et
IsapiRewrite4.INI n’importe où. Faite attention a mettre le Ionic
Rewriter
DLL et fichier INI dans le même dossier.
Click-Droit sur votre “Default Web S.” et sélectionner “Properties”.
Selectionner les filtres ISAPI. Cliquer sur ‘Add’ et entrer un nom du
filter de “Rewriter” et sélectionner la DLL IsapiRewrite4.
Ensuite, aller sur l’onglet “Home Directory”. Assurez-vous que “a
directory
stored on this computer” est sélectioné et mettez ‘D:\MyApp\Public’
comme
chemin local. Mettez le nom de votre application dans “Application
Name”
(Si c’est grisé ensuite cliquer sur “Create” pour installer site comme
une
application) et assurez-vous que des “Scripts and Executables” est
sélectionné pour “execute permissions”.
Après, cliquer sur “configuration”. Sous “Mapping” cliquer sur “Add”
et
séléctionné FastCGI.DLL en tant qu’exécutable, .fcgi est une extension
(si
vous allez avoir plusieurs applications Rails sur un seul serveur que
vous
devez changer cette extension sur une base Rail-application-spécifique -
par
exemple le myapp1, le myapp2 etc…),avec “All Verbs”, “Script Engine” et
“Check that file exists” tous sélectionés
Si vous êtes sur le win 2003, il y a une étape suplémentaire Vous devez
permettre l’accès d’IIS aux executables que vous allé utillisés. Créez
une
nouvelle extension Web Server dans le panneau de configuration de IIS,
appelez le “MyApp”. Ajoutez FastCGI.DLL, IsapiRewriter4.DLL et RubyW.exe
Ã
cette extention et assurez-vous qu’elle est autorisés.
Bon On a fait quoi jusqu’ici
- On a installé Rails et notre application et nous sommes assurés
que
tout fonctionne sous WEBrick - Nous avons dit à IIS que le site Web par défaut pour ce serveur
est le dossier ‘public’ de notre application. - Nous avons à dit IIS que n’importe quelle demande au site Web par
défaut devrait être alimentée par le Rewriter ionique - Nous avons dit à IIS que n’importe quelle demande d’un fichier
.fcgi devrait être alimentée par FastCGI
Nous n’avons pas encoredis à Ionic ou FastCGI comment se comporter
En premier Ironic. Ã?ditez IsapiRewrite4.INI - supprimer le contenu du
fichier et remplacer par
Ruby on Rails
IterationLimit 0
RewriteRule ^(/[^.]+)$ /dispatch.fcgi?$1
L’étape suivante est de configurer FastCGI. Lancer RegEdit et ouvrez
la clef locale Machine/Software.
Créez une clef (dossier) appelé “FastCGI”.
En dessous d’ici vous crée une nouvel clef “dossier” appellée “.fcgi”.
Quand FastCGI est appelé par un fichier d’extension .fcgi il
emploiera les propriétées de cette clef.
C’est pourquoi, quand nous avons plusieurs applications
multiples sur un serveur, nous devons changer les extensions des
fichiers
(.myapp1, .myapp2 comme détaillé ci-dessus - de même nous
devons renommer dispatch.fcgi en dispatch.myapp1/dispatch.myapp2 pour
chaque application respective).
Les propriétés basiques de FastCGI dont nous avons besoins :
- AppPath - placez ceci dans C:\ruby\bin\rubyw.exe
- Args - placez ceci dans D:\MyApp\public\dispatch.fcgi
- BindPath - placez ceci dans MyAppRailsCGI
.AppPath dis à FastCGI que nous voulons que Ruby exécute notre script,
passant the Args comme un point d’entrée de l’application,
utilisant le Named Pipe “MyAppRailsCGI” pour communiquer.
Maintenant on redémarre le serveur IIS. Lancer votre navigateur et aller
ici
(http://myserver/controller/action/id ). Vous devez surement optenir
“recognition failed for dispatch.fcgi”.
Donc aller sur
D:\MyApp\vendor\actionpack-version\lib\action_controller\request.rb (
C’est
le fichier Ruby que ActionPack utilises pour suivre une demande URL)
Sous Apache et WEBrick, il renvoie la variable d’environnement
“REQUEST_URI”, et s’il ne peut pas atteindre, il manipule ‘PATH_INFO’ et
‘SCRIPT_NAME’ pour obtenir le même résultat.
Sous IIS cela ne fonctionne pas (la méthode attend est un “SCRIPT_NAME”
du
“/dispatch.fcgi” (est qui ce que nous avons) mais un “PATH_INFO” du
“/dispatch.fcgi/controller/action”.
En d’autres termes, au lieu d’extraire le URL original et de le
transformer
en une “query string”, il s’attend à ce que le URL original soit cloué
sur
la fin du script d’expéditeur. Le problème avec ceci est que si le URL
ressemble à ca, alors le URL ne finit plus avec le .fcgi ainsi IIS ne
sait
pas demander à FastCGI pour traiter la demande. Notre PATH_INFO
ressemble
plus a ca “/dispatch.fcgi?/controller/action” - notez tous les points
d’interrogation dansl’ URL. Cependant, si nous modifions la méthode de
request_uri dans request.rb pour ressembler ca :
Returns the request URI correctly, taking into account the
idiosyncracies
# of the various servers.
def request_uri
if uri = env[‘REQUEST_URI’]
(%r{^\w+://[^/]+(/.*|$)$} =~ uri) ? $1 : uri # Remove domain,
which webrick puts into the request_uri.
else # REQUEST_URI is blank under IIS - get this from PATH_INFO
and SCRIPT_NAME
script_filename = env[‘SCRIPT_NAME’].to_s#.match(%r{[^/]+$})
uri = env[‘PATH_INFO’]
uri = uri.sub(“#{script_filename}”, “”) unless
script_filename.nil?
uri << env[‘QUERY_STRING’] unless env[‘QUERY_STRING’].nil?
uri
end
end
Je suis 99% sûr que ceci éditent est ce qui fait la chute des
web_services.
Cependant, pour les sites traditionnels (n’utilisant pas de query
string)
sont conduits correctement.
Relancer IIS et essayer de vous connectez une nouvel fois. Apres un long
moment (le temps que FastCGI appelle Ruby pour la première fois). Vous
devriez voir votre application. Bravo !! Allez faire une pause
Ooups - J’ai failli oublié. Creer un fichier batch
(D:\MyApp\Scripts\cleanup.cmd) qui contient cette ligne
D:\Temp\Ruby_Sess*.*.
Ensuite ajouter un processus de tache qui lance fichier batch chaque
nuit .
Ceci nettoye les fichiers de sessions de Ruby et previens la création
d’un
trop grand nombre.
Idéalement, vous devriez examiné le dernier-changer-temps et
supprimeriez
seulement ceux qui n’avaient pas été touchés dans 20 minutes, quel que
soit,
mais, pour mon application au moins, se débaraisser de toutes les
sessions
d’hier est assez bon. Votre kilomètrage peut changer.