2010-06-17 18 views
13

Estoy intentando implementar mi aplicación de rieles con capistrano, pero estoy teniendo algunos problemas para ejecutar mis migraciones. En mi entorno de desarrollo solo uso sqlite como mi base de datos, pero en mi servidor de producción utilizo MySQL.Ejecución de la migración en el servidor al implementar con capistrano

El problema es que quiero que las migraciones se ejecuten desde mi servidor y no desde mi máquina local, ya que no puedo conectarme a mi base de datos desde una ubicación remota.

Configuración de mi servidor: Una caja de debian ejecutando ngnix, pasajero, mysql y un repositorio de git.

¿Cuál es la manera más fácil de hacer esto?

actualización:

Aquí está mi script deploy: (i reemplazado mi dominio actual con 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" 

Cuando corro desplegar la tapa, todo está funcionando bien hasta que se intenta para ejecutar la migración Aquí está el error que estoy recibiendo:

 
** [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))) 

Es por esto que se necesita para ejecutar la migración desde el servidor y no de mi máquina local.

¿Alguna idea?

Respuesta

6

¿Ha agregado su usuario de implementación como usuario de mysql en el servidor? Creo que el servidor local es el servidor que se refiere a sí mismo, no a su máquina local.

También usted no ha definido su usuario en la secuencia de comandos de despliegue:

set :user, "deploy_user_name" 

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

Bueno, el nombre de usuario de implementación es el mismo que mi nombre de usuario local. Además, cuando inicio sesión y ejecuto la migración a través de ssh, funciona bien. – Pandafox

+0

Hmm. En realidad, el error que publicaste está en update_code. ¿Puedo simplemente verificar, su aplicación se llama en realidad example.com? ¿Implementó el límite: configuración e implementación de límite: verificación desde su máquina local? example.com es solo algo que pones por privacidad aquí lo tomo? – mark

+0

Heh, sí, reemplacé mi dominio real con mi example.com por privacidad. El código se implementa en mi servidor muy bien, es solo que Capistrano intenta ejecutar la migración en mi máquina local y no en el servidor :) – Pandafox

41

intenta agregar

after "deploy", "deploy:migrate" 

en su archivo de configuración /deploy.rb. Esto ejecutará una migración en su servidor luego de una implementación exitosa de su proyecto.

+0

En mi deploy.rb tengo bundle_install tarea, así que estoy utilización 'después: bundle_install, "desplegar: migrar"' –

+1

Trabajó para mi. Asegúrese de que su confirmación sea enviada a la rama correcta de su repositorio para que surta efecto. – scarver2

+1

@ denis.peplin ¿No capistrano hacer el paquete para usted de todos modos? Desinstalé una gema a través de SSH y se volvió a instalar automáticamente. – Besi

Cuestiones relacionadas