2012-08-22 21 views
7

¿Cómo se puede suprimir la salida de db: load: schema? CorrerSuprimir salida en Rake Tarea db: schema: cargar

bundle exec rake db:schema:load 

con los -s, -q, o incluso VERBOSE=false opciones no hace ninguna diferencia en el resultado; aparece la misma basura "create_table ... add_index ..." que no quiero ver. Invoco esto desde dentro de una tarea de Rake personalizada y no quiero que el usuario vea todo esto cada vez.

ACTUALIZACIÓN:

He resuelto el problema con alguna orientación de @Deefour mediante el uso de:

system "bundle exec rake db:schema:load -s RAILS_ENV=#{Rails.env} >NUL" 

>NUL es para máquinas Windows, Unix basados ​​puede utilizar > /dev/null.

en lugar de

Rake::Task['db:schema:load'].invoke 

como lo habían estado haciendo en mi tarea personalizada. Tenga en cuenta que esta solución es específica para máquinas con Windows. Para máquinas basadas en Unix, imagino que debería poder usar la solución aceptada a continuación.

+0

¿Cómo estás ejecutando el comando anterior en el archivo de rastrillo? – deefour

+0

Rake :: Task ['db: schema: load']. Invoke – aguazales

+3

Descubrí que usar una llamada de 'sistema' por separado era bastante lenta, así que eche un vistazo a usar 'quietly' o' silence_stream' como @lightswitch recomienda. –

Respuesta

25

Aquí es una solución más limpia que funciona a través del sistema:

silence_stream(STDOUT) do 
    # anything written to STDOUT here will be silenced 
    Rake::Task["db:schema:load"].invoke 
end 

también

quietly do 
    # anything written to STDOUT or STDERR here will be silenced 
    Rake::Task["db:schema:load"].invoke 
end 

prefiero silence_stream(STDOUT)-quietly ya que todavía permite un mensaje de error escrito a STDERR estar mostrado, que será útil cuando el comando de rake comience a actuar.

Referencias: silence_stream, silence_warnings, & quietly

+0

Gosh darn brilliant! Algo nuevo aprendido todos los días. Saludos –

+0

Útil cuando se prueban las tareas de rake también. Hace que la producción sea mucho más limpia –

+0

ambos 2 están desaprobados en los rieles 4.2 porque no son seguros para subprocesos –

3

En lugar de llamar a la tarea con Rake::Task['...'].invoke, puede ejecutar el comando en una subshell, redirigiendo la salida a /dev/null.

system "bundle exec rake db:schema:load > /dev/null 2>&1" 
+0

Cuando lo hice, en lugar de la salida de db: schema: load, se muestra "El proceso no puede acceder al archivo porque lo está utilizando otro proceso" y no se ejecutó 'db: schema: load'. – aguazales

+0

¿Puede agregar a su pregunta el resto de la tarea de rake que ejecuta 'db: schema: load' dentro? – deefour

+0

Al leer en '/ dev/null', me doy cuenta de que podría ser útil para ti saber que estoy en una máquina con Windows, no basada en Unix. : P – aguazales

Cuestiones relacionadas