Question Déploiement d'une application Rails sur plusieurs serveurs à l'aide de Capistrano - Meilleures pratiques


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

Je pensais être sur la bonne voie pour que Capistrano accepte les arguments en ligne de commande, mais cela a étouffé quand j'ai essayé de définir les rôles dans les espaces de noms. Je transmettais en tant qu'argument 'hosts = 1,2,3' et définissais le rôle: app / web / db sur "machine # {host} .com" après avoir fractionné la commande et entrer dans chaque do do host | {} ...

Quoi qu'il en soit, à part créer 4 fichiers deploy.rb différents et le renommer avant de lancer cap: déployer à chaque fois, je suis coincé. Je voudrais pouvoir 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 devrait être dans deploy.rb divisé avec des espaces de noms ou s'il devrait être divisé en plusieurs fichiers * deploy **.


40
2018-04-13 22:56


origine


Réponses:


Tout devrait 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 base de données a été spécifié. C'est la machine à partir de laquelle les migrations seront exécutées. Si vous ne possédez qu'une seule base de données (99,9% de chances que la réponse à cette question soit OUI), assurez-vous d'en fournir une seule.


70
2018-04-14 08:58



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'

3
2018-02-26 00:54