Déploiement Capistrano
Capistrano is a tool used for automation of the application deployment process. Capistrano is mainly used for deploying rails apps. Changes made to the rails app can be easily transferred to the server using cap deploying. Capistrano can be configured with any version control system like SVN / GIT for deploying an app. Also, we can define application server type (mongrel, mod_rails / Fcgi) on which the app has be deployed in Capistrano. Here I’m going to discuss cap deploying an app using SVN with Mongrel cluster as the application server.
Installation:Capistrano peut être installé comme une gemme rubis comme indiqué ci-dessous : Gemme $ installer Capistrano
Configuration d'une application Rails pour utiliser Capistrano :
Cela peut être fait en exécutant la commande suivante depuis l'application Rails :
$ capifie .
La commande ci-dessus créera un Fichier Cap et config/deploy.rb déposer.
user@hostname [~/railsapp]$ capify . [add] writing ‘./Capfile’ [add] writing ‘./config/deploy.rb’
utilisateur@nom d'hôte [~/railsapp]$ cat Capfile
load ‘deploy’ if respond_to?(:namespace) # cap2 differentiator Dir[‘vendor/plugins/*/recipes/*.rb’].each { |plugin| load(plugin) }
load ‘config/deploy’ # remove this line to skip loading any of the default tasks
utilisateur@nom d'hôte [~/railsapp]$ cat config/deploy.rb
set :application, “set your application name here” set :repository, “set your repository location here”
# If you aren’t deploying to /u/apps/#{application} on the target # servers (which is the default), you can specify the actual location # via the :deploy_to variable: # set :deploy_to, “/var/www/#{application}”
# If you aren’t using Subversion to manage your source code, specify # your SCM below: # set :scm, :subversion
role :app, “your app-server here” role :web, “your web-server here” role :db, “your db-server here”, :primary => true
PS : Comme alternative, on peut créer directement Fichier Cap et déployer.rb file under the rails app and load necessary data to it using ‘vi’ editor.
Capfile et Deploy.rb :
The Capfile contains all the tasks which has to be performed while cap deploying. All the functions (tasks) inside the Capfile can be defined using the keyword ‘task’. Group of functions is termed as namespace.
Exemple de fichier Cap :
load ‘deploy’ if respond_to?(:namespace) # cap2 differentiator
load ‘config/deploy’
espace de noms : déployer
tâche :start, :roles => :app do
run “cd #{current_path} && mongrel_rails cluster::configure -e production -p #{mongrel_port} -N #{mongrel_nodes} -c #{current_path} –user #{user} –group #{user}”
run “cd #{current_path} && mongrel_rails cluster::start”
run “rm -rf /home/#{user}/public_html; ln -s #{current_path}/public /home/#{user}/public_html”
run “mkdir -p #{deploy_to}/shared/config”
run “mv #{current_path}/config/mongrel_cluster.yml #{deploy_to}/shared/config/mongrel_cluster.yml”
run “ln -s #{deploy_to}/shared/config/mongrel_cluster.yml #{current_path}/config/mongrel_cluster.yml”
fin
tâche :restart, :roles => :app do
run “ln -s #{deploy_to}/shared/config/mongrel_cluster.yml #{current_path}/config/mongrel_cluster.yml”
run “cd #{current_path} && mongrel_rails cluster::restart”
run “cd #{current_path} && chmod 755 #{chmod755}”
fin
fin
The config/deploy.rb file contains all the variables which are used while cap deploying. Say, in the above Capfile we’re accessing different varibles like – mongrel_port, user, chmod755 etc the same should be first defined in the config/deploy.rb file then only Capistrano will execute the task properly.
Exemple de configuration/deploy.rb :
set :application, “railsapp”
set :domain, “hostname”
set :user, “user”
set :repository, “svn+ssh://#{user}@#{domain}/home/#{user}/svn/#{application}/trunk”
set :use_sudo, faux
set :group_writable, faux
set :deploy_to, “/home/#{user}/apps/#{application}”
définir : deploy_via, : checkout
set :chmod755, “app config db lib public vendor script script/* public/disp*”
set :mongrel_port, “4000”
set :mongrel_nodes, “2”
default_run_options[:pty] = vrai
rôle : application, domaine
rôle : web, domaine
rôle :db, domaine, :primary => true
Ici, nous devons placer le nom de l'application, le nom de domaine et l'utilisateur ssh appropriés. L'application Rails doit être importée dans le référentiel SVN avant de procéder au déploiement avec Cap. Le référentiel SVN peut être configuré comme indiqué ci-dessous.
utilisateur @ nom d'hôte [~] $ mkdir svn
utilisateur @ nom d'hôte [~] $ svnadmin créer ~/svn/railsapp
PS : assurez-vous également de fournir le même nom de l'application Rails au référentiel SVN.
Une fois cela fait, nous pouvons importer l'application Rails dans le référentiel SVN :
utilisateur@nom d'hôte [~]$ mkdir -p ~/temp/railsapp/tags ~/temp/railsapp/branches
utilisateur@nom d'hôte [~]$ cp -pR ~/railsapp ~/temp/railsapp/trunk
Assurez-vous ici de fournir le chemin complet vers railsapp (le répertoire de votre application Rails) lors de la création du répertoire trunk. De plus, l'utilisateur, l'application et le domaine corrects doivent être indiqués dans le fichier trunk/config/deploy.rb.
L'application Rails sera située dans le répertoire trunk et pourra maintenant être importée dans le référentiel svn.
user@hostname [~]$ svn import temp/railsapp file:///home/user/svn/railsapp -m “message”
L'application Rails importée dans le référentiel SVN (par exemple située sur le serveur) peut être extraite sur la machine locale comme indiqué ci-dessous :
user@localmachine [~]$ svn co svn+ssh://user@hostname/home/user/svn/railsapp/trunk nom du dossier
Mot de passe : mot de passe SSH de l'utilisateur
Nous pouvons maintenant trouver le fichier capfile modifié et le fichier déployer.rb dans le dossier extrait. Après cela, à partir du RAILS_ROOT de l'application version locale, exécutez la commande suivante.
Déploiement du plafond $ : configuration
Déploiement du plafond $ : à froid
The command ‘cap deploy:setup’ will setup the initial directory structure required for the cap deployed app.
Dire,
/accueil/utilisateur/applications
/home/user/apps/nom de l'application
/home/user/apps/appname/releases
/home/user/apps/appname/shared
The command ‘cap deploy:cold’ will check out the rails app from the svn repository and place it under a directory inside – /home/user/apps/appname/releases. Later a sym link will be created from /home/user/apps/appname/releases/ /home/user/apps/appname/current. Also the document root will be pointed to the public directory of the current release as mentioned in the Capfile.
Le répertoire de version contient les applications déployées sur le serveur et le dossier d'application sera nommé en fonction de la date et de l'heure auxquelles l'application Rails a été déployée.
Dire,
utilisateur@nom d'hôte [~/apps/railsapp/releases]$ ls -al
total 24
drwxrwxr-x 6 utilisateur utilisateur 4096 28 avril 2009 .
drwxrwxr-x 4 utilisateur utilisateur 4096 9 juillet 2009 ..
drwxr-xr-x 16 utilisateur utilisateur 4096 15 octobre 2008 20081015183834
drwxr-xr-x 21 utilisateur utilisateur 4096 3 février 2009 20081015183941
drwxr-xr-x 8 utilisateur utilisateur 4096 28 avril 2009 20090428215604
drwxr-xr-x 8 utilisateur utilisateur 4096 28 avril 2009 20090428221701
Les répertoires communs dans l'application Rails (par exemple, les images, les fichiers de configuration, les fichiers journaux) sont placés dans le répertoire partagé et liés symboliquement à la version actuelle.
Les références: http://www.capify.org/index.php/Capistrano http://www.hostingrails.com/Capistrano-2-x-Deploying-Your-Rails-Application-on-HostingRails-com
Contributeur : Vinayan
Prenez contact avec nous.