91 votes

rails de Redirection de la console de sortie vers un fichier

Sur une console bash, si je fais ceci:

cd mydir
ls -l > mydir.txt

L'opérateur > capture de l'entrée standard et redirige vers un fichier; si je reçois la liste des fichiers dans mydir.txt au lieu de la sortie standard.

Est-il possible de faire quelque chose de similaire sur les rails de la console?

J'ai un rubis instruction qui génère un grand nombre de tirages (~8k lignes) et j'aimerais être capable de le voir complètement, mais la console de seulement se "souvient" de la dernière 1024 lignes. Alors j'ai pensé à propos de la redirection vers un fichier, Si quelqu'un connait une meilleure option, je suis tout ouïe.

159voto

Minimul Points 1064

Si vous cherchez un moyen rapide d'une solution d'utiliser simplement la suivante:

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

116voto

Veger Points 17657

Vous pouvez utiliser l'override $stdout pour rediriger la sortie de la console:

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

Vous pouvez aussi avoir besoin d'appeler cette fois:

$stdout.sync = true

Cela permettra de rediriger toutes les sorties dans le fichier. Si vous souhaitez rediriger temporairement la sortie assurez-vous que vous stockez la valeur d'origine de l' $stdout de sorte que vous pouvez le changer en arrière.

4voto

Chirantan Points 6493

Si vous écrivez le code suivant dans votre fichier d'environnement, il devrait fonctionner.

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

Vous pouvez également faire pivoter le fichier journal à l'aide de

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

Pour l'enregistrement seulement active record d'opérations connexes, vous pouvez le faire

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

Ceci vous permet également d'avoir différents enregistreur de config/fichier pour des environnements différents.

2voto

user83510 Points 3885

Utilisation hirb. Automatiquement les pages de toute sortie dans la cisr plus longue que celle d'un écran. Mettez dans une session de console pour voir ce travail:

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

Pour en savoir plus sur la façon dont cela fonctionne, lisez ce post.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X