ruby on rails - index - rails-Redirigir la salida de la consola a un archivo
rails guide (7)
Además de la respuesta de Veger, hay una forma más de hacerlo que también ofrece muchas otras opciones adicionales.
Simplemente abra el directorio de proyectos de sus raíles e ingrese el comando:
rails c | tee output.txt
T comando también tiene muchas otras opciones que puede consultar por:
man tee
En una consola bash, si hago esto:
cd mydir
ls -l > mydir.txt
El operador> captura la entrada estándar y la redirige a un archivo; entonces obtengo la lista de archivos en mydir.txt
en lugar de la salida estándar.
¿Hay alguna forma de hacer algo similar en la consola de los 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.
Intente utilizar la utilidad de script
comandos si está en sistema operativo basado en Unix.
script -c "rails runner -e development lib/scripts/my_script.rb" report.txt
Eso me ayudó a capturar una salida muy larga muy fácil de un script de corredor Rails en un archivo.
Intenté usar el redireccionamiento a un archivo, pero se escribió solo al final del script.
Eso no me ayudó porque tenía pocos comandos interactivos en mi script.
Luego usé solo script
y luego ejecuté el rails runner
en la sesión de script, pero no escribió todo. Luego encontré esta script -c "runner command here" output_file
y guardó todos los resultados que deseaba. Esto fue en Ubuntu 14.04 LTS
Referencias
Escribir la salida de la consola de Ruby en el archivo de texto
Puede utilizar override $stdout
para redirigir el resultado de la consola:
$stdout = File.new(''console.out'', ''w'')
También puede necesitar llamar 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 poder volver a cambiarlo.
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 rotar el archivo de registro usando
config.logger = Logger.new(Rails.root.join(''path_to_log_file.txt''), number_of_files, file_roation_size_threshold)
Para registrar solo operaciones relacionadas con registros activos, puede hacer
ActiveRecord::Base.logger = Logger.new(Rails.root.join(''path_to_log_file.txt''))
Esto también le permite tener diferentes configuraciones / archivos del registrador para diferentes entornos.
Si está buscando una solución única y rápida, simplemente use lo 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
Usando Hirb, puede optar por registrar solo la salida de Hirb en un archivo de texto. Eso le permite seguir viendo los comandos que escribe en la ventana de la consola, y solo la salida del modelo irá al archivo.
Del archivo Léame de Hirb :
Aunque las vistas predeterminadas se imprimen en STDOUT, se pueden modificar fácilmente 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
Use hirb . Pone automáticamente cualquier salida en irb que sea más larga que una pantalla. Pon esto en una sesión de consola para ver este trabajo:
>> require ''rubygems''
>> require ''hirb''
>> Hirb.enable
Para más información sobre cómo funciona esto, lee esta publicación .