2010-02-01 4 views
4

Je rencontre des problèmes de portée variable avec le module multi-étages de la gemme capistrano-ext. J'ai actuellement, dans config/deploy/staging.rb.Configuration Capistrano

set(:settings) { YAML.load_file("config/deploy.yml")['staging'] } 

set :repository, settings["repository"] 
set :deploy_to, settings["deploy_to"] 
set :branch,  settings["branch"] 
set :domain,  settings["domain"] 
set :user,  settings["user"] 

role :app, domain 
role :web, domain 
role :db, domain, :primary => true 

Mon fichier config/deploy/production.rb est similaire. Cela ne semble pas très sec. Idéalement, je pense que j'aimerais que tout soit dans le fichier deploy.rb. S'il y avait une variable avec l'étape actuelle, tout serait vraiment propre.

MISE À JOUR: J'ai trouvé une solution.

Je définis cette fonction dans deploy.rb:

def set_settings(params) 
    params.each_pair do |k,v| 
    set k.to_sym, v 
    end 
    if exists? :domain 
    role :app, domain 
    role :web, domain 
    role :db, domain, :primary => true 
    end 
end 

Ensuite, mon fichier staging.rb est juste set_settings(YAML.load_file("config/deploy.yml")['staging'])

Répondre

0

essayer CAPDEV='staging' cap deploy et ENV['CAPDEV'] dans deploy.rb

+0

Il est impossible de taper simplement '$ cap staging deploy' et de faire fonctionner les choses? – Eli

2

Tu fais ce trop compliqué.

Il suffit de mettre votre code commun dans votre fichier deploy.rb:

role :app, domain 
role :web, domain 
role :db, domain, :primary => true 

et vos paramètres en fonction de la scène dans votre config/deploy/staging.rb, production.rb, fichiers, etc..

Ensuite, exécutez deploy cap, comme vous avez dit: la mise en scène de cap déployer

Vos fichiers stage.rb peuvent utiliser des variables communes aussi bien. Par exemple, mon fichier de mise en scène a une seule ligne:

set: deploy_to, "/ var/www/# {domaine} _staging"

Le reste est deploy.rb

+0

Nous l'avons fait avec succès aussi – Tilendor

0

Eli,

Oui, vous pouvez déployer le déploiement de cap. Faites cela en haut de votre fichier de déploiement.

set :deploy_env, ARGV[0].to_sym 

ou sans le symbole si vous préférez. Mais notez que cela peut exiger un environnement pour des choses simples comme le fonctionnement

cap -vT