在bash控制台上,如果我这样做:
cd mydir
ls -l > mydir.txt
>运算符捕获标准输入并将其重定向到文件;所以我得到文件列表mydir.txt
而不是标准输出。
有什么办法可以在Rails控制台上做类似的事情吗?
我有一个ruby语句,该语句会生成大量打印件(约8k行),我希望能够完全看到它,但是控制台仅“记住”了最后1024行左右。因此,我考虑过重定向到文件-如果有人知道更好的选择,我将不知所措。
Answers:
您可以使用override$stdout
重定向控制台输出:
$stdout = File.new('console.out', 'w')
您可能还需要调用一次:
$stdout.sync = true
这会将所有输出重定向到文件。如果要临时重定向输出,请确保存储了原始值,$stdout
以便可以将其改回。
$stdout.sync=true
。编辑。
$stdout.reopen("my.log", "w")
似乎是一个更优雅的解决方案,请参见:stackoverflow.com/a/2480439/21217
$stdout = File.new('console.out', 'w')
花了很长时间。我正在使用Windows。不知道那是原因!
快速的一次性解决方案:
irb:001> f = File.new('statements.xml', 'w')
irb:002> f << Account.find(1).statements.to_xml
irb:003> f.close
创建一个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
NoMethodError: undefined method 'statements' for #<Blog:0x007fdaadbe4530>
或undefined method 'statements' for #<ActiveRecord::Relation:0x007fdaaaf4f880>
:(
statements.xml
保存在系统中。我找不到文件。
rails console
(很可能是应用程序的根目录)中。(至少我是这种情况。)
除了Veger的答案外,还有一种做起来的方法,它还提供了许多其他附加选项。
只需打开您的rails项目目录并输入命令:
rails c | tee output.txt
tee命令还具有许多其他选项,您可以通过以下方式签出:
man tee
rails server | tee file.txt
并且没有输出到STDOUT或文件。我只是认为服务器在这种情况下无法启动。
rails console 2>&1 | tee file.txt
。在tee中不是一个选项,只是将stderr重定向到stdout的简单重定向,所以两者都以您的file.txt结尾。
pp
得到输出,而不色码。
如果您在环境文件中编写以下代码,则它应该可以工作。
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'))
这也使您可以针对不同的环境使用不同的记录器配置/文件。
使用Hirb,您可以选择仅将Hirb输出记录到文本文件中。这样一来,您仍然可以在控制台窗口中看到键入的命令,仅模型输出将进入该文件。
从Hirb自述文件:
尽管默认情况下将视图打印到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
script
如果您使用的是基于Unix的操作系统,请尝试使用实用程序。
script -c "rails runner -e development lib/scripts/my_script.rb" report.txt
这帮助我轻松地将Rails Runner脚本的非常长的输出捕获到文件中。
我尝试使用重定向到文件,但仅在脚本末尾写入。
那对我没有帮助,因为我的脚本中很少有交互式命令。
然后我只使用script
了一个rails runner
脚本,然后运行了in脚本会话,但是它并没有编写所有内容。然后我发现了这一点,script -c "runner command here" output_file
并按需要保存了所有输出。这是在Ubuntu 14.04 LTS上
参考文献:
/ubuntu/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798