2010-07-17 9 views
1

J'ai une application rails qui ne se trouve pas dans le répertoire racine du référentiel. Lors de son déploiement, d'autres fichiers statiques sont déployés avec lui dans un répertoire parent. La structure est quelque chose comme ceci:Capistrano déploiement de répertoire de changement pour les migrations

root 
-- otherstuff 
-- railsapp 

Quand je fais un déploiement avec deploy cap: migrations, la commande Capistrano qui obtient des regards exécutés comme celui-ci, ce qui bien sûr ne fonctionne pas:

cd /u/apps/minicart/releases/20100717215044; rake RAILS_ENV=staging db:migrate 

Comment puis-je changer cela pour que ce sera:

cd /u/apps/minicart/releases/20100717215044/railsapp; rake RAILS_ENV=staging db:migrate 

je l'ai fait travailler en ajoutant une tâche qui exécute cette commande après deploy: finalize_update, mais je préfère utiliser le haut i n méthode, plus ma version piratée est exécutée à chaque déploiement.

Tout conseil serait apprécié.

Tim

+0

Les fichiers statiques sont-ils les mêmes pour chaque déploiement? – Eimantas

+0

Non, ils changent aussi, mais pas aussi fréquemment. –

Répondre

2

Cela s'est avéré très simple.

J'ai ajouté un espace de nom de déploiement à mon fichier deploy.rb, puis j'ai redéfini la méthode migrate. Maintenant, ma méthode fonctionne sur le déploiement de cap: migrations.

namespace :deploy do 
    desc "Migrating the database" 
    task :migrate, :roles => :app do 
    run <<-CMD 
     cd #{release_path}/minicart; RAILS_ENV=#{stage} rake db:migrate 
    CMD 
    end 
end