rails - перенаправление вывода консоли в файл - PullRequest
75 голосов
/ 17 марта 2010

На консоли bash, если я сделаю это:

cd mydir
ls -l > mydir.txt

Оператор> захватывает стандартный ввод и перенаправляет его в файл; поэтому я получаю список файлов в mydir.txt вместо стандартного вывода.

Есть ли способ сделать что-то похожее на консоли rails?

У меня есть оператор ruby, который генерирует много отпечатков (~ 8 тыс. Строк), и я хотел бы увидеть его полностью, но консоль «запоминает» только последние 1024 строки или около того. Поэтому я подумал о перенаправлении в файл - если кто-нибудь знает лучший вариант, я все уши.

Ответы [ 7 ]

126 голосов
/ 14 ноября 2012

Если вы ищете быстрое одноразовое решение, просто используйте следующее:

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
90 голосов
/ 17 марта 2010

Вы можете использовать переопределение $stdout, чтобы перенаправить вывод консоли:

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

Вам также может понадобиться позвонить один раз:

$stdout.sync = true

Это перенаправит весь вывод в файл. Если вы хотите временно перенаправить вывод, убедитесь, что вы сохранили исходное значение $stdout, чтобы вы могли изменить его обратно.

10 голосов
/ 11 января 2018

Помимо ответа Вегера, есть еще один способ сделать это, который также предоставляет множество других дополнительных опций.

Просто откройте каталог вашего проекта rails и введите команду:

rails c | tee output.txt
У команды

tee также есть много других опций, которые вы можете проверить:

man tee
4 голосов
/ 17 марта 2010

Если вы напишите следующий код в файле среды, он должен работать.

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'))

Это также позволяет вам иметь разные конфигурации / файл логгера для разных сред.

3 голосов
/ 21 января 2015

Используя 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
2 голосов
/ 17 марта 2010

Используйте hirb . Он автоматически выводит на экран любой вывод в irb, который длиннее экрана. Поместите это в сеанс консоли, чтобы увидеть эту работу:

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

Подробнее о том, как это работает, , прочитайте это сообщение .

1 голос
/ 20 апреля 2018

Попробуйте использовать утилиту script, если вы работаете в ОС Unix.

script -c "rails runner -e development lib/scripts/my_script.rb" report.txt

Это помогло мне легко записать очень-очень длинный вывод скрипта Rails в файл.

Я пытался использовать перенаправление в файл, но он был записан только в конце скрипта.

Это не помогло мне, потому что в моем сценарии было мало интерактивных команд.

Затем я использовал script, а затем запустил rails runner в сеансе сценария, но он не написал все. Затем я нашел этот script -c "runner command here" output_file, и он сохранил все выходные данные, как было нужно. Это было на Ubuntu 14.04 LTS

Ссылки

https://askubuntu.com/questions/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798

Запись вывода Ruby Console в текстовый файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...