2010-03-17 11 views
59

En una consola Bash, si hago esto:rieles - Reorientación de salida de la consola a un archivo

cd mydir 
ls -l > mydir.txt 

El operador> captura la entrada estándar y lo redirige a un archivo; entonces obtengo el listado de archivos en mydir.txt en lugar de en la salida estándar.

¿Hay alguna manera de hacer algo similar en la consola de rieles?

Tengo una declaración de rubí que genera muchas impresiones (~ 8k líneas) y me gustaría poder verla por completo, pero la consola solo "recuerda" las últimas 1024 líneas más o menos. Así que pensé en redireccionar a un archivo: si alguien conoce una mejor opción, soy todo oídos.

Respuesta

77

Puede utilizar anulación $stdout para redirigir la salida de la consola:

$stdout = File.new('console.out', 'w') 

También es posible que tenga que llamar a esto una vez:

$stdout.sync = true 

Esto redireccionará todos los resultados al archivo. Si desea redirigir temporalmente la salida, asegúrese de almacenar el valor original de $stdout para que pueda volver a cambiarla.

+0

Gracias! Esto es exactamente lo que estaba buscando. – kikito

+2

No funcionó para mí hasta que agregué '$ stdout.sync = true'. Editado –

+2

'$ stdout.reopen (" my.log "," w ")' parece ser una solución más elegante, vista en: http://stackoverflow.com/a/2480439/21217 – dain

3

Si escribe el siguiente código en su archivo de entorno, debería funcionar.

if "irb" == $0 
    config.logger = Logger.new(Rails.root.join('path_to_log_file.txt')) 
end 

También puede girar el archivo de registro utilizando

config.logger = Logger.new(Rails.root.join('path_to_log_file.txt'), number_of_files, file_roation_size_threshold) 

para el registro de las operaciones solo acerca de registro activo, que puede hacer

ActiveRecord::Base.logger = Logger.new(Rails.root.join('path_to_log_file.txt')) 

Esto también le permite tener diferentes registrador config/archivo para diferentes ambientes.

+0

Esto es útil, pero la otra respuesta hace lo que yo quería de una manera más simple. Gracias por tomarse el tiempo para responder de todos modos. – kikito

2

Use hirb. Pone automáticamente cualquier salida en irb que sea más larga que una pantalla. Poner esto en una sesión de la consola para ver este trabajo:

>> require 'rubygems' 
>> require 'hirb' 
>> Hirb.enable 

Para más información sobre cómo funciona esto, read this post.

+0

Gracias por responder, pero no estaba buscando paginación; Yo quería ver todo en una sola página. – kikito

101

Si usted está buscando una solución rápida de una sola vez, sólo tiene que utilizar el siguiente:

irb(main):001:0> f = File.new("statements.xml", 'w') 
irb(main):002:0> f << Account.find(1).statements.to_xml 
irb(main):003:0> f.close 

Crear un accesorio JSON

>> f = File.new(Rails.root + 'spec/fixtures/qbo/amy_cust.json', 'w') 
>> f << JSON.pretty_generate((q.get :customer, 1).as_json) 
>> f.close 
+0

Exactamente lo que estaba buscando, ¡gracias amablemente! – kermitology

+0

Me dio 'NoMethodError: 'declaraciones' de método indefinido para # ' o 'declaraciones' de método indefinido para # ':( – Magne

+4

¿Dónde está el archivo' statements.xml' guardado en el sistema. No puedo encontrar el archivo. – SujitS

3

Usando Hirb, puede elegir sólo el que entrar Salida Hirb a un archivo de texto. Eso le permite seguir viendo los comandos que escribe en la ventana de la consola, y solo el resultado del modelo irá al archivo.

Desde el Hirb readme:

Aunque vistas por defecto se imprimen en STDOUT, pueden ser fácilmente modificados para escribir en cualquier lugar:

# Setup views to write to file 'console.log'. 
>> Hirb::View.render_method = lambda {|output| File.open("console.log", 'w') {|f| f.write(output) } } 

# Doesn't write to file because Symbol doesn't have a view and thus defaults to irb's echo mode. 
>> :blah 
=> :blah 

# Go back to printing Hirb views to STDOUT. 
>> Hirb::View.reset_render_method 
+0

¡Gracias por esto, exactamente lo que estaba buscando! – sbonami

2

Aparte de la respuesta de Veger, no es uno de los más manera de hacerlo que también ofrece muchas otras opciones adicionales.

Sólo tiene que abrir el directorio del proyecto rieles e introduzca el comando: comando

rails c | tee output.txt 

camiseta también tiene muchas otras opciones que se pueden extraer por:

man tee 
Cuestiones relacionadas