2011-10-20 3 views
3

J'ai besoin de trouver un moyen de définir la variable globale env de Capistrano. La valeur réelle est générée en cours d'exécution, je ne peux pas le vérifier dans le repo et charger à partir de là.Capistrano: Comment définir la variable d'environnement globale?

Cette valeur doit être chargée ENV['RAILS_ASSET_ID'] dans un initialiseur.

Comment puis-je le faire?

Répondre

1

Pour contourner ce problème, j'utilise cette méthode jusqu'à présent:

desc 'My custom task' 
task :task_foo do 
    asset_version = 12345 
    system "echo #{asset_version} > RAILS_ASSET_ID" 
end 

et il est récupéré dans intializer:

File.open(Rails.root.join 'RAILS_ASSET_ID').read.strip] 

Mais il doit y avoir une meilleure façon. Des idées?

+0

mieux: '# echo {} asset_version >> # {} current_path/config/initializers/asset_version.rb' –

+0

Pourquoi voudriez-vous ajouter à un fichier encore et encore sans effacer l'ancienne valeur? – tadman

+0

Chaque déploiement de plafond crée une nouvelle structure de répertoire, de sorte que le fichier ne doit pas être présent. Le '>>' est un mécanisme de sécurité, au cas où un développeur crée un jour ce fichier. –

3

Que diriez-vous juste de le spécifier dans votre initialiseur?

ENV['RAILS_ASSET_ID'] = 12345 
2

Si par variable globale que vous voulez dire quelque chose qui est généré en Capistrano, puis utilisé dans Rails alors oui, vous devrez créer une sorte de fichier. Les variables Ruby ne persistent pas entre les exécutions. Les variables d'environnement peuvent être définies mais ne s'appliquent qu'aux sous-processus.

Une façon de vider un fichier sur le serveur lors de votre déploiement est comme ce que vous avez là, seulement à distance:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf" 

Vous pouvez ensuite ramasser et lire cette valeur que vous avez fait. Vous ne pouvez pas utiliser la variable default_environment capistrano?

5

cf github/capistrano

Par exemple, nous pouvons l'utiliser pour rbenv dans la production:

set :default_environment, { 
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" 
} 
Questions connexes