42 votes

Déploiement d'une application Rails sur plusieurs serveurs avec Capistrano - Meilleures pratiques

J'ai une application rails que je dois déployer sur 3 serveurs - machine1.com, machine2.com et machine3.com. Je veux pouvoir la déployer sur toutes les machines en même temps et sur chaque machine individuellement. Quelqu'un peut-il m'aider avec un squelette de fichier de configuration / recette Capistrano ? Est-ce que tout doit être dans deploy.rb ou est-ce que je dois le décomposer dans machine1.rb, etc ?

Je pensais être sur la bonne voie en faisant en sorte que Capistrano prenne en compte les arguments de ligne de commande, mais il s'est bloqué lorsque j'ai essayé de définir les rôles dans les espaces de noms. J'ai passé 'hosts=1,2,3' comme argument et défini le rôle:app/web/db à "machine#{host}.com" après avoir divisé la commande et être entré dans un each do |host| {}...

Bref, à part créer 4 fichiers deploy.rb différents et les renommer avant d'exécuter cap:deploy à chaque fois, je suis dans l'impasse. J'aimerais être capable de faire ce qui suit :

cap deploy:machine1:latest_version_from_svn
cap deploy:all_machines:latest:version_from_svn

Je ne sais pas si tout doit être dans deploy.rb, séparé par des espaces de noms, ou si cela doit être réparti en plusieurs fichiers *deploy**.rb.

71voto

Tim Harper Points 1252

Tout doit aller dans un seul fichier. Voici un exemple :

set :application, "my-app"
set :repository,  "git@git.my-git-host.com:my-app.git"
set :keep_releases, 5
set :deploy_via, :remote_cache
set :git_enable_submodules, true
set :scm, :git
set :user, 'your-user-here'

set :deploy_to, "/var/www/staging.mydomain.com"
set :branch, 'staging'
set :rails_env, 'staging'

role :web, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :app, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com"
role :db, "db.mydomain.com"
# ...

Vous verrez qu'un seul serveur de données a été spécifié. Il s'agit de la machine à partir de laquelle les migrations seront exécutées. Si vous n'avez qu'une seule base de données (99,9% de chance que la réponse à cette question soit OUI), alors assurez-vous de n'en fournir qu'une seule.

4voto

max kaplan Points 69

J'ai dû utiliser une syntaxe légèrement différente.

role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'
role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X