2010-04-13 25 views
38

que tienen una tarea Rake que carga los datos de configuración en la base de datos de un archivo, no es un rubí correcta/rieles manera de llamarlo en una migración hacia arriba?¿Ejecuta una tarea de Rake desde la migración?

Mi objetivo es sincronizar mi equipo configuraciones DB, sin que transmitir a continuación para ejecutar la tarealalala

def self.up 
    change_table :fis_situacao_fiscal do |t| 
     t.remove :mostrar_endereco 
     t.rename :serie, :modelo 
    end 

    Faturamento::Cfop.destroy_all() 
    #perform rake here ! 
    end 

ACTUALIZACIÓN Cómo hago ahora, y obras:

system('rake sistema:load_data file=faturamento/cfop') 

Y esta es la sugerencia de @Ryan Bigg, a nd es la excepción:

Rake::Task['rake sistema:load_data file=faturamento/cfop'].invoke() 

.

== AlterSituacaoFiscalModeloEndereco: migrating ==================== 
-- change_table(:fis_situacao_fiscal) 
    -> 0.0014s 

rake aborted! 
An error has occurred, this and all later migrations canceled: 

Don't know how to build task 'rake sistema:load_data file=faturamento/cfop' 

los casos en que salió mal?

+2

¿Por qué le pasará la palabra "rastrillo" en? Pruébalo sin eso. Sabe que es una tarea de rake. – ryeguy

+0

@Fabiano: actualizó la respuesta. –

Respuesta

72

Sí hay una manera de hacerlo:

Rake::Task['your_task'].invoke 

actualización

No ponga desprendimiento dentro de los corchetes, sólo el nombre de la tarea. Debe establecer una variable ENV cuando se ejecuta este:

En la consola

FILE=somefile.text rake db:sistema:load_data 

Llamando por separado

FILE=somefile.text rake some:other:task:that:calls:it 

Este estará disponible en sus tareas como ENV['file']

+0

Hice una actualización con su respuesta, contento si pudiera ayudar a un poco más de –

+1

Pruébalo sin "rastrillo" .. – ryeguy

+3

¿Qué pasa si la tarea está en un espacio de nombres? Tengo un sistema de semillas que se pueden ejecutar con 'semi rastrillo: semillas [89] '(se ejecutará el archivo .rb comenzando con' 89_'), pero no puedo invocarlo con 'Rake :: Tarea [' semi: seed [89] '] '¿Tiene una idea de cómo podría invocar la tarea de inicialización en un archivo de migración? – MrYoshiji

9

Tenga en cuenta que si se llama a la tarea Rake con 'sistema', y Es necesario verificar el estado del proceso después y generar una excepción si la tarea Rake falló. De lo contrario, la migración tendrá éxito incluso si la tarea Rake falla.

se puede comprobar el estado del proceso de esta manera:

if !($?.success?) 
    raise "Rake task failed" 
end 

Invocando la tarea rastrillo es una opción más agradable - que hará que la migración no se si falla la tarea Rake.

Cuestiones relacionadas