На консоли bash, если я сделаю это:
cd mydir
ls -l > mydir.txt
Оператор> захватывает стандартный ввод и перенаправляет его в файл; поэтому я получаю список файлов mydir.txt
вместо стандартного вывода.
Есть ли способ сделать что-то подобное на консоли rails?
У меня есть оператор ruby, который генерирует множество отпечатков (~ 8k строк), и я хотел бы видеть его полностью, но консоль «запоминает» только последние 1024 строки или около того. Итак, я подумал о перенаправлении в файл - если кто знает лучший вариант, я все слышу.
источник
$stdout.sync=true
. Отредактировано.$stdout.reopen("my.log", "w")
кажется более элегантным решением: stackoverflow.com/a/2480439/21217$stdout = File.new('console.out', 'w')
занимает очень много времени. Я использую окна. Не уверен, что это причина!Быстрое разовое решение:
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
(скорее всего, в корневом каталоге вашего приложения). (По крайней мере, так было со мной.)Помимо ответа Вегера, есть еще один способ сделать это, который также предоставляет множество других дополнительных опций.
Просто откройте каталог вашего проекта rails и введите команду:
rails c | tee output.txt
Команда 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
источник
Используйте хирб . Он автоматически пролистывает любой вывод в 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Рекомендации:
/ubuntu/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798
Запись вывода консоли Ruby в текстовый файл
источник