导轨 – 将控制台输出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
有关如何工作的更多信息,请阅读这篇文章 。