[ruby-on-rails] rails-콘솔 출력을 파일로 리디렉션

bash 콘솔에서 이렇게하면 :

cd mydir
ls -l > mydir.txt

> 연산자는 표준 입력을 캡처하여 파일로 리디렉션합니다. 그래서 mydir.txt표준 출력 대신에 파일 목록을 얻습니다 .

레일 콘솔에서 비슷한 작업을 수행 할 수있는 방법이 있습니까?

많은 인쇄물 (~ 8k 줄)을 생성하는 루비 문이 있고이를 완전히보고 싶지만 콘솔은 마지막 1024 줄 정도만 “기억”합니다. 그래서 파일로 리디렉션하는 방법에 대해 생각했습니다. 더 나은 옵션을 아는 사람이 있다면 모두 귀입니다.



답변

재정의 $stdout를 사용 하여 콘솔 출력을 리디렉션 할 수 있습니다 .

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

다음과 같이 한 번만 호출해야 할 수도 있습니다.

$stdout.sync = true

그러면 모든 출력이 파일로 리디렉션됩니다. 출력을 일시적으로 리디렉션하려면 원래 값을 저장하여 $stdout다시 변경할 수 있는지 확인하십시오 .


답변

빠른 일회성 솔루션 :

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


답변

Veger의 답변 외에도 다른 많은 추가 옵션을 제공하는 또 다른 방법이 있습니다.

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의 추가 정보 :

기본적으로 뷰는 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를 사용하십시오 . screenful보다 긴 irb의 모든 출력을 자동으로 페이징합니다. 이 작업을 보려면 콘솔 세션에 넣으십시오.

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

작동 방식에 대한 자세한 내용은 이 게시물을 참조하십시오 .


답변

scriptUnix 기반 OS 를 사용하는 경우 유틸리티를 사용해보십시오 .

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에있었습니다.

참조 :

/ubuntu/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798

Ruby 콘솔 출력을 텍스트 파일에 쓰기