Na konsoli bash, jeśli zrobię to:
cd mydir
ls -l > mydir.txt
Operator> przechwytuje standardowe wejście i przekierowuje je do pliku; więc otrzymuję listę plików mydir.txt
zamiast w standardowym wyjściu.
Czy jest sposób na zrobienie czegoś podobnego na konsoli szynowej?
Mam instrukcję ruby, która generuje wiele wydruków (~ 8k linii) i chciałbym móc ją zobaczyć w całości, ale konsola „pamięta” tylko ostatnie 1024 linie. Pomyślałem więc o przekierowaniu do pliku - jeśli ktoś zna lepszą opcję, to mam uszy.
źródło
$stdout.sync=true
. Edytowano.$stdout.reopen("my.log", "w")
wydaje się być bardziej eleganckim rozwiązaniem, widoczne pod adresem: stackoverflow.com/a/2480439/21217$stdout = File.new('console.out', 'w')
zajmuje naprawdę dużo czasu. Używam okien. Nie jestem pewien, czy to jest powód!Szybkie jednorazowe rozwiązanie:
irb:001> f = File.new('statements.xml', 'w') irb:002> f << Account.find(1).statements.to_xml irb:003> f.close
Utwórz urządzenie 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
źródło
NoMethodError: undefined method 'statements' for #<Blog:0x007fdaadbe4530>
lubundefined method 'statements' for #<ActiveRecord::Relation:0x007fdaaaf4f880>
:(statements.xml
zostanie zapisany w systemie. Nie mogę znaleźć pliku.rails console
(najprawdopodobniej w katalogu głównym aplikacji). (Przynajmniej tak było w moim przypadku).Oprócz odpowiedzi Vegera jest jeszcze jeden sposób na zrobienie tego, który daje również wiele innych dodatkowych opcji.
Po prostu otwórz katalog projektu rails i wprowadź polecenie:
rails c | tee output.txt
Polecenie tee ma również wiele innych opcji, które możesz sprawdzić:
źródło
rails server | tee file.txt
i nie ma wyjścia do STDOUT lub pliku. Po prostu myślę, że serwer nie uruchamia się w tym przypadku.rails console 2>&1 | tee file.txt
. Nie jest to opcja w tee, po prostu proste przekierowanie stderr na stdout, więc oba kończą się w twoim pliku.txt.pp
aby uzyskać wydruk bez kodów kolorów.Jeśli napiszesz następujący kod w pliku środowiska, powinno działać.
if "irb" == $0 config.logger = Logger.new(Rails.root.join('path_to_log_file.txt')) end
Możesz również obrócić plik dziennika za pomocą
config.logger = Logger.new(Rails.root.join('path_to_log_file.txt'), number_of_files, file_roation_size_threshold)
Możesz wykonywać tylko operacje związane z rejestrowaniem aktywnych rekordów
ActiveRecord::Base.logger = Logger.new(Rails.root.join('path_to_log_file.txt'))
Pozwala to również mieć różne konfiguracje / pliki rejestratora dla różnych środowisk.
źródło
Używając Hirb, możesz wybrać rejestrowanie tylko wyjścia Hirb do pliku tekstowego. To sprawia, że nadal możesz zobaczyć polecenia, które wpisujesz w oknie konsoli, a tylko wynik modelu zostanie przeniesiony do pliku.
Z pliku Readme Hirb :
Chociaż widoki są domyślnie drukowane na STDOUT, można je łatwo zmodyfikować, aby pisać w dowolnym miejscu:
# 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
źródło
Użyj hirb . Automatycznie stronicuje każde wyjście w irb, które jest dłuższe niż ekranowe. Umieść to w sesji konsoli, aby zobaczyć, jak działa:
>> require 'rubygems' >> require 'hirb' >> Hirb.enable
Aby dowiedzieć się więcej o tym, jak to działa, przeczytaj ten post .
źródło
Spróbuj użyć
script
narzędzia, jeśli używasz systemu operacyjnego opartego na systemie Unix.script -c "rails runner -e development lib/scripts/my_script.rb" report.txt
To pomogło mi łatwo przechwycić bardzo długie dane wyjściowe skryptu uruchamiającego Rails do pliku.
Próbowałem użyć przekierowania do pliku, ale zostało to napisane dopiero na końcu skryptu.
To mi nie pomogło, ponieważ w moim skrypcie było kilka interaktywnych poleceń.
Następnie użyłem
script
i uruchomiłemrails runner
sesję w skrypcie, ale nie napisała wszystkiego. Następnie znalazłem toscript -c "runner command here" output_file
i zapisało wszystkie dane wyjściowe zgodnie z oczekiwaniami. To było na Ubuntu 14.04 LTSBibliografia:
/ubuntu/290322/how-to-get-and-copy-a-too-long-output-completely-in-terminal#comment1668695_715798
Zapisywanie wyników konsoli Ruby do pliku tekstowego
źródło