2010-06-17 4 views
13

J'essaie de déployer mon application rails avec capistrano, mais j'ai des problèmes lors de l'exécution de mes migrations. Dans mon environnement de développement, j'utilise simplement sqlite comme base de données, mais sur mon serveur de production j'utilise MySQL. Le problème est que je souhaite que les migrations soient exécutées à partir de mon serveur et non de ma machine locale, car je ne peux pas me connecter à ma base de données à partir d'un emplacement distant.Migration en cours sur le serveur lors du déploiement avec capistrano

Configuration du serveur: Une boîte debian exécutant ngnix, passenger, mysql et un dépôt git.

Quelle est la manière la plus simple de le faire?

mise à jour:

Voici mon script deploy: (i remplacé mon domaine réel avec example.com)

set :application, "example.com" 
set :domain, "example.com"   

set :scm, :git  
set :repository, "[email protected]:project.git" 

set :use_sudo, false 

set :deploy_to, "/var/www/example.com" 

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

after "deploy", "deploy:migrate" 

Quand je lance deploy cap, tout fonctionne bien jusqu'à ce qu'il tente pour exécuter la migration. Voici l'erreur que je reçois:

 
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2)) 
connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2))) 

C'est la raison pour laquelle je dois exécuter la migration à partir du serveur et non de ma machine locale.

Des idées?

Répondre

6

Avez-vous ajouté votre utilisateur en déploiement en tant qu'utilisateur mysql sur le serveur? Je pense que le localhost est le serveur se référant à lui-même et non à votre machine locale.

Aussi, vous n'avez pas défini votre utilisateur dans votre script deploy:

set :user, "deploy_user_name" 

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

Eh bien, le nom d'utilisateur de déploiement est le même que mon nom d'utilisateur local. De plus, lorsque je me connecte et exécute la migration via ssh, cela fonctionne correctement. – Pandafox

+0

Hmm. En fait, l'erreur que vous avez posté est sur update_code. Puis-je juste vérifier, votre application est en fait appelée exemple.com, vous avez fait un déploiement de cap: installation et déploiement de cap: vérifier à partir de votre machine locale? example.com est juste quelque chose que vous mettez pour la vie privée ici, je le prends? – mark

+0

Heh, ouais, j'ai remplacé mon vrai domaine avec mon exemple.com pour la vie privée. Le code est bien déployé sur mon serveur, c'est juste que Capistrano essaie d'exécuter la migration sur ma machine locale et non sur le serveur :) – Pandafox

41

Essayez d'ajouter

after "deploy", "deploy:migrate" 

dans votre fichier config/deploy.rb. Cela entraînera une migration sur votre serveur après un déploiement réussi de votre projet.

+0

Dans mon deploy.rb je bundle_install tâche, donc je suis utilisé 'après: bundle_install, "déployer: migrer"' –

+1

A travaillé pour moi. Assurez-vous que votre validation est transmise à la branche correcte de votre référentiel afin qu'elle prenne effet. – scarver2

+1

@ denis.peplin Capistrano ne fait pas le paquet pour vous? J'ai désinstallé une gemme via SSH et il a été réinstallé automatiquement. – Besi

Questions connexes