рельсы - перенаправление вывода консоли в файл



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



cd mydir
ls -l > mydir.txt


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



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



у меня есть оператор ruby, который генерирует множество отпечатков (~8k строк), и я хотел бы видеть его полностью, но консоль только "помнит" последние 1024 строки или около того. Так Что Я думал о перенаправлении в файл - если кто-то знает лучший вариант, я все уши.

673   7  

7 ответов:

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

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

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

$stdout.sync = true

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

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

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

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

if "irb" == 
  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'))

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

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

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

rails c | tee output.txt

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

man tee

используя 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

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

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

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

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

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

ссылки:

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

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

Comments

    Ничего не найдено.