导轨 – 将控制台输出redirect到一个文件

在bash控制台上,如果我这样做:

cd mydir ls -l > mydir.txt 

>运算符捕获标准input并将其redirect到一个文件; 所以我得到mydir.txt的文件列表,而不是在标准输出中。

有没有办法在rails控制台上做类似的事情?

我有一个ruby语句,可以生成大量的打印内容(〜8k行),我希望完全可以看到它,但控制台只能“记住”最后的1024行。 所以我想redirect到一个文件 – 如果有人知道更好的select,我全部耳朵。

您可以使用覆盖$stdout来redirect控制台输出:

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

您可能还需要调用一次:

 $stdout.sync = true 

这会将所有输出redirect到文件。 如果要暂时redirect输出,请确保存储$stdout的原始值,以便将其更改回来。

如果您正在寻找快速的一次性解决scheme,只需使用以下内容:

 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 

创build一个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 

如果你在你的环境文件中写下下面的代码,它应该可以工作。

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

您也可以使用旋转日志文件

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

只logging活动logging相关的操作,你可以这样做

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

这也可以让你有不同的logging器configuration/文件为不同的环境。

使用Hirb,您可以select仅将Hirb输出logging到文本文件。 这使得您仍然可以看到您在控制台窗口中input的命令,只有模型输出将转到该文件。

从Hirb自述 :

尽pipe默认情况下视图被打印到STDOUT,但是它们可以很容易地修改为可以在任何地方写入:

 # 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 

使用hirb 。 它会自动寻找比屏幕更长的irb输出。 把它放在一个控制台会话中,看看这个工作:

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

有关如何工作的更多信息,请阅读这篇文章 。