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; así que obtengo la lista de archivos en mydir.txt
lugar de en la salida estándar.
¿Hay alguna forma de hacer algo similar en la consola de rieles?
Tengo una declaración ruby 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 redirigir a un archivo: si alguien conoce una opción mejor, soy todo oídos.
fuente
$stdout.sync=true
. Editado.$stdout.reopen("my.log", "w")
parece ser una solución más elegante, vista en: stackoverflow.com/a/2480439/21217$stdout = File.new('console.out', 'w')
tomando mucho tiempo. Estoy usando windows. ¡No estoy seguro si esa es la razón!Una solución rápida y única:
irb:001> f = File.new('statements.xml', 'w') irb:002> f << Account.find(1).statements.to_xml irb:003> f.close
Crea un accesorio JSON:
irb:004> f = File.new(Rails.root + 'spec/fixtures/qbo/amy_cust.json', 'w') irb:005> f << JSON.pretty_generate((q.get :customer, 1).as_json) irb:006> f.close
fuente
NoMethodError: undefined method 'statements' for #<Blog:0x007fdaadbe4530>
oundefined method 'statements' for #<ActiveRecord::Relation:0x007fdaaaf4f880>
:(statements.xml
guarda el archivo en el sistema? No puedo encontrar el archivo.rails console
(probablemente el directorio raíz de su aplicación). (Al menos este fue mi caso.)Además de la respuesta de Veger, hay una o más formas de hacerlo que también proporciona muchas otras opciones adicionales.
Simplemente abra el directorio de su proyecto de rails e ingrese el comando:
rails c | tee output.txt
El comando tee también tiene muchas otras opciones que puede consultar mediante:
fuente
rails server | tee file.txt
y no hay salida para STDOUT o el archivo. Creo que el servidor no se inicia en este caso.rails console 2>&1 | tee file.txt
. No es una opción en tee, solo una simple redirección de stderr a stdout para que ambos terminen en su archivo.txt.pp
para obtener resultados sin códigos de color.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 de registrador para diferentes entornos.
fuente
Con 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 se imprimen de forma predeterminada 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
fuente
Utilice hirb . Pagina automáticamente cualquier salida en irb que sea más larga que una pantalla completa. Pon esto en una sesión de consola para ver este trabajo:
>> require 'rubygems' >> require 'hirb' >> Hirb.enable
Para obtener más información sobre cómo funciona esto, lea esta publicación .
fuente
Intente usar la
script
utilidad si está en un sistema operativo basado en Unix.script -c "rails runner -e development lib/scripts/my_script.rb" report.txt
Eso me ayudó a capturar fácilmente el resultado muy largo de un script de ejecución de Rails en un archivo.
Intenté usar la redirección a un archivo, pero solo se escribió al final del script.
Eso no me ayudó porque tenía pocos comandos interactivos en mi script.
Luego utilicé solo
script
y luego ejecuté larails runner
sesión de script en, pero no escribió todo. Luego encontré estoscript -c "runner command here" output_file
y guardé toda la salida como se deseaba. Esto fue en Ubuntu 14.04 LTSReferencias:
/ubuntu/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798
Escribir la salida de la consola Ruby en un archivo de texto
fuente