Bashコンソールで、これを行うと:
cd mydir
ls -l > mydir.txt
>演算子は標準入力をキャプチャし、ファイルにリダイレクトします。だから、mydir.txt
標準出力ではなく。
Railsコンソールで同様のことを行う方法はありますか?
Ruby大量のプリント(〜8k行)を生成するステートメントがあり、それを完全に見たいのですが、コンソールは最後の1024行のみを "記憶しています"だから、私はファイルへのリダイレクトを考えた-誰かがより良いオプションを知っていれば、私はすべて耳だ。
オーバーライド$stdout
を使用して、コンソール出力をリダイレクトできます。
$stdout = File.new('console.out', 'w')
また、これを一度呼び出す必要がある場合があります。
$stdout.sync = true
これにより、すべての出力がファイルにリダイレクトされます。出力を一時的にリダイレクトする場合は、$stdout
の元の値を保存して、元に戻せるようにしてください。
簡単な1回限りのソリューションを探している場合は、次を使用します。
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
Vegerの答えとは別に、他の多くの追加オプションを提供する方法が1つあります。
Railsプロジェクトディレクトリを開き、次のコマンドを入力します。
Rails c | tee output.txt
teeコマンドには、次の方法でチェックアウトできる他の多くのオプションもあります。
man tee
環境ファイルに次のコードを記述すると、動作するはずです。
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 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
UnixベースのOSを使用している場合は、script
ユーティリティを使用してみてください。
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にありました
参照: