references rails index home guide generate commands ruby-on-rails ruby file console

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

https://askubuntu.com/questions/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798

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 .