在bash控制台上,如果我这样做:
cd mydir
ls -l > mydir.txt
>操作员捕获标准输入并将其重定向到文件;所以我在mydir.txt
而不是标准输出中获得了文件列表。
有没有办法在rails控制台上做类似的事情?
我有一个产生大量打印(~8k行)的ruby语句,我希望能够完全看到它,但控制台只能“记住”最后1024行左右。所以我想重定向到一个文件 - 如果有人知道一个更好的选择,我会全力以赴。
答案 0 :(得分:126)
如果您正在寻找快速的一次性解决方案,只需使用以下内容:
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
创建JSON fixture
>> f = File.new(Rails.root + 'spec/fixtures/qbo/amy_cust.json', 'w')
>> f << JSON.pretty_generate((q.get :customer, 1).as_json)
>> f.close
答案 1 :(得分:90)
您可以使用覆盖$stdout
重定向控制台输出:
$stdout = File.new('console.out', 'w')
您可能还需要拨打一次电话:
$stdout.sync = true
这会将所有输出重定向到文件。如果您想暂时重定向输出,请确保存储原始值$stdout
,以便您可以将其更改回来。
答案 2 :(得分:9)
除了Veger的答案之外,还有一种方法可以做到这一点,它还提供了许多其他选择。
只需打开rails项目目录并输入命令:
rails c | tee output.txt
tee命令还有许多其他选项,您可以通过以下方式查看:
man tee
答案 3 :(得分:4)
如果您在环境文件中编写以下代码,它应该可以正常工作。
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)
要仅记录与活动记录相关的操作,您可以执行
ActiveRecord::Base.logger = Logger.new(Rails.root.join('path_to_log_file.txt'))
这也允许您为不同的环境提供不同的记录器配置/文件。
答案 4 :(得分:3)
使用Hirb,您可以选择仅将Hirb输出记录到文本文件中。 这使您仍然能够在控制台窗口中看到您键入的命令,只有模型输出才会转到该文件。
来自Hirb readme:
虽然默认情况下的视图会打印到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
答案 5 :(得分:2)
使用hirb。它会自动将irb中任何超过屏幕的输出分页。将它放在控制台会话中以查看此工作:
>> require 'rubygems'
>> require 'hirb'
>> Hirb.enable
有关其工作原理的更多信息,请read this post。
答案 6 :(得分:1)
如果您使用的是基于Unix的操作系统,请尝试使用script
实用程序。
script -c "rails runner -e development lib/scripts/my_script.rb" report.txt
这帮助我轻松捕获了Rails runner脚本非常长的输出到文件。
我尝试使用重定向到文件,但它只在脚本结束时编写。
这对我没有帮助,因为我的脚本中没有很少的交互式命令。
然后我只使用script
然后在脚本会话中运行rails runner
,但它没有写出所有内容。然后我找到了这个script -c "runner command here" output_file
并且它保存了所需的所有输出。这是在Ubuntu 14.04 LTS
参考文献: