Rails - перенаправление вывода консоли в файл
В консоли bash, если я это сделаю:
cd mydir
ls -l > mydir.txt
Оператоp > фиксирует стандартный ввод и перенаправляет его в файл; поэтому я получаю список файлов в mydir.txt
вместо стандартного вывода.
Есть ли способ сделать что-то подобное на консоли rails?
У меня есть оператор ruby, который генерирует множество отпечатков (~ 8k строк), и я хотел бы видеть его полностью, но консоль только "запоминает" последние 1024 строки или около того. Поэтому я подумал о перенаправлении файла - если кто-то знает лучший вариант, я все уши.
Ответы
Ответ 1
Вы можете использовать переопределение $stdout
для перенаправления вывода консоли:
$stdout = File.new('console.out', 'w')
Вам также может потребоваться вызвать это один раз:
$stdout.sync = true
Это перенаправит весь вывод в файл. Если вы хотите временно перенаправить вывод, убедитесь, что вы сохранили исходное значение $stdout
, чтобы изменить его.
Ответ 2
Если вы ищете быстрое одноразовое решение, просто используйте следующее:
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
>> f = File.new(Rails.root + 'spec/fixtures/qbo/amy_cust.json', 'w')
>> f << JSON.pretty_generate((q.get :customer, 1).as_json)
>> f.close
Ответ 3
Если вы напишете следующий код в своем файле среды, он должен работать.
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
Используя 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 echo mode.
>> :blah
=> :blah
# Go back to printing Hirb views to STDOUT.
>> Hirb::View.reset_render_method
Ответ 5
Используйте hirb. Он автоматически печатает любой вывод в irb, который длиннее экрана. Поместите это в сеанс консоли, чтобы увидеть эту работу:
>> require 'rubygems'
>> require 'hirb'
>> Hirb.enable
Подробнее о том, как это работает, прочитать этот пост.