2010-04-13 4 views
37

J'ai une application Rails que je dois déployer sur 3 serveurs: machine1.com, machine2.com et machine3.com. Je veux être capable de le déployer sur toutes les machines en même temps et chaque machine individuellement. Quelqu'un peut-il m'aider avec un fichier de configuration/recette Capistrano squelette? Est-ce que tout devrait être dans deploy.rb ou devrais-je le sortir dans machine1.rb, etc?Déploiement d'une application Rails sur plusieurs serveurs à l'aide de Capistrano - Meilleures pratiques

Je pensais que j'étais sur la bonne voie pour que Capistrano accepte les arguments de la ligne de commande, mais il s'est étouffé lorsque j'ai essayé de définir les rôles dans les espaces de noms. Je passerais en 'hosts = 1,2,3' comme argument et placerais le rôle: app/web/db sur "machine # {hôte} .com" après la division de la commande et entrer dans un chacun | | De toute façon, autre que de créer 4 fichiers deploy.rb différents et de le renommer avant d'exécuter cap: déployer à chaque fois, je suis perplexe. Je voudrais pouvoir faire ce qui suit:

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

ne sais pas si elle devrait tous être en deploy.rb rompre avec namespaces ou si elle doit être divisée en plusieurs * ** déployer. fichiers rb.

Répondre

67

Tout devrait aller dans un fichier. Voici un exemple:

set :application, "my-app" 
set :repository, "[email protected]: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 DB a été spécifié. C'est 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 chances que la réponse à cette question soit OUI), assurez-vous de n'en fournir qu'une.

+1

Très utile, merci;] – jkndrkn

+3

hey @Louise, ce réglage est-il la réponse par défaut? – jackyalcine

+1

Comment déploieriez-vous juste à machine1.mydomain.com (comme indiqué dans la question) –

2

Je devais 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' 
Questions connexes