рельсы - перенаправление вывода консоли в файл
на консоли bash, если я сделаю это:
cd mydir
ls -l > mydir.txt
оператор > захватывает стандартный ввод и перенаправляет его в файл; поэтому я получаю список файлов в mydir.txt вместо стандартного вывода.
есть ли способ сделать что-то подобное на консоли rails?
у меня есть оператор ruby, который генерирует множество отпечатков (~8k строк), и я хотел бы видеть его полностью, но консоль только "помнит" последние 1024 строки или около того. Так Что Я думал о перенаправлении в файл - если кто-то знает лучший вариант, я все уши.
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.txttee команда также имеет много других вариантов, которые вы можете проверить по:
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ссылки:
Comments