W zadaniu rake, jeśli używam polecenia puts, widzę wynik na konsoli. Jednak nie zobaczę tego komunikatu w pliku dziennika, gdy aplikacja zostanie wdrożona w środowisku produkcyjnym.
Jeśli jednak powiem Rails.logger.info, to w trybie programistycznym nic nie widzę na konsoli. Muszę przejść do pliku dziennika i to załatwić.
Idealnie chciałbym użyć Rails.logger.info, aw trybie deweloperskim wewnątrz zadania rake, dane wyjściowe z loggera powinny być również wysłane do konsoli.
Czy jest na to sposób?
źródło
Rails.logger = Logger.new(STDOUT)
development.rb?config.logger = Logger.new(STDOUT)
Możesz utworzyć nowe zadanie prowizji, aby to zadziałało.
W ten sposób, gdy wykonujesz zadanie rake, możesz najpierw dodać to_stdout, aby uzyskać komunikaty dziennika stdout lub nie dołączać go, aby wiadomości były wysyłane do domyślnego pliku dziennika
źródło
Zadania rake są uruchamiane przez użytkownika w wierszu poleceń. Wszystko, co chcą wiedzieć od razu ("przetworzone 5 wierszy"), powinno być wyprowadzane na terminal z poleceniem
puts
.Wszystko, co należy zachować dla potomności („wysłano e-mail z ostrzeżeniem na adres [email protected]”), należy przesłać na adres
Rails.logger
.źródło
Powiedziałbym, że używanie
Rails.logger.info
jest właściwą drogą.Nie będziesz mógł go zobaczyć w konsoli serwera, ponieważ nie będzie działał przez serwer. Po prostu otwórz nową konsolę i
tail -f
plik dziennika, załatwi sprawę.( przez )
źródło
tailf
"Jest podobny do tail -f, ale nie uzyskuje dostępu do pliku, gdy nie rośnie" (ze strony podręcznika). Jest też krótszyKod
W przypadku Rails 4 i nowszych możesz użyć transmisji Loggera .
Jeśli chcesz uzyskać zarówno STDOUT, jak i rejestrowanie plików dla zadań rake w trybie programistycznym, możesz dodać ten kod do
config/environments/development.rb
:Test
Oto małe zadanie Rake, aby przetestować powyższy kod:
Działające
rake stdout_and_log:test
wyjściapodczas
został dodany do
log/development.log
.Działające
rake stdout_and_log:test RAILS_ENV=production
wyjściapodczas
został dodany do
log/production.log
.źródło
basename($0) == 'rake'
sztuczka już nie działa, ponieważrails
samo polecenie działarake
. Chciałbym znaleźć dla niego dobry zamiennik, który wykracza poza zakres zadania, które powoduje skonfigurowaniebroadcast
. (Przynajmniej ta część nadal działa dobrze.)Rakefile
katalogu głównego swojego projektuCo powiesz na stworzenie pomocnika aplikacji, który wykrywa, które środowisko jest uruchomione i robi właściwe rzeczy?
Następnie wywołaj output_debug zamiast puts lub logger.info
źródło
W Railsach 2.X, aby przekierować rejestrator do STDOUT w modelach:
Aby przekierować loggera w kontrolerach:
źródło
Wykonaj zadanie w tle za pomocą „&” i otwórz skrypt / konsolę lub cokolwiek innego. W ten sposób możesz uruchomić wiele poleceń w tym samym oknie.
note Uwaga Może szybko stać się niechlujna, gdy jest dużo danych wyjściowych logowania.
źródło