15

나는 몇 개의 컨트롤러와 레이크 작업을 가진 간단한 레일 애플리케이션을 가지고있다. 두 작업은 whenever gem으로 구성된 cron에 의해 실행됩니다. 내 작업의레이크 작업에서 레일즈 예외 알리미

하나는 매일 실행되고, 언젠가는 예외가 발생하고 기본적으로 내가 크론하여이 경고를받을

내가 무슨 일이 일어나고 이런 이유로 난 그냥이 exception notification를 설치 한 것을 디버깅 할
rake aborted! 
undefined method `parameterize' for nil:NilClass 

Tasks: TOP => mailboxes:clean_processed 
(See full trace by running task with --trace) 

Gemfile

gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier' 

에서이 라인 보석 및

application.rb 파일에 구성

이 보석은 랙 미들웨어이기 때문에 웹 요청에만 사용할 수 있고 레이크 작업에는 사용할 수 없습니다. 나는 갈퀴 작업도 가능하게하고 싶습니다. 작업을 수행하는 this gist을 발견했습니다.

그것은 작동

그러나 그 방법에 보석 구성을 반복 DRY 필요가 있고 난 또한

exception_notify { actual_task_code } 

가 어떤인가에 같은 블록에있는 그들의 문을 둘러싸 내 모든 레이크 작업을 변경해야 이 문제를 해결하는 더 좋은 방법은?

P. 알림을 변경해야 할 경우 몇 줄의 코드 만 프로젝트에 추가 했으므로 문제가되지 않습니다.

P.P.S. 나는 또한 --trace 옵션을 추가하기 위해 crontab의 rake 라인을 변경할 수 있다는 것을 알고 있지만 예외 해결책 인 imho가 웹 코드에서도 도움이되는 더 나은 해결책이기 때문에 그 해결책을 좋아하지 않습니다.

업데이트 방금 ​​전에이 관련 질문을 발견했습니다 : exception_notification for delayed_job 두 답변 모두 비슷한 트릭을 사용합니다. 2

나는 에어 브레이크 (이전 hoptoad라고도 함) 또는 예외적 같은 온라인 서비스를 시도거야

있지만 모두 유료 서비스를하는 ...

업데이트 : 나는 매우의 Airbrake App 시도 좋은 응용 프로그램이지만 동일한 문제로 인해 고통을 겪고 있지만 레이크 작업에서 예외를 알리기 위해 Rakefile을 해킹해야합니다. 그러나이 코드가 필요하기 때문에 해킹은 덜 건조합니다.

# notify exceptions 
def exception_notify 
    yield 
rescue Exception => exception 
    HoptoadNotifier.notify exception 
    raise exception 
end 

구성 매개 변수를 반복 할 필요가 없습니다. 나는 갈퀴 작업에서 예외를 통지 받기 위해 이보다 더 잘할 수 없다고 생각합니다.

답변

5

...

+0

레이크 오류 로깅을 활성화하려면''conifg/initializers/airbrake.rb'''에''config.rescue_rake_exceptions = true'' 행을 추가해야합니다. – KurtPreston

1

감사합니다. 나는 그저 하나의 cron 작업 만 가지고 있기 때문에 나에게 큰 도움이된다.

당신이 APP_CONFIG를 통해 아마도 상수로 구성을 돌 수 있었다, 그것을 건조 : https://github.com/cjbottaro/app_config

또한, 당신은 exception_notify { } 모든 것을 포장 task :... do을 담당 어떤 클래스를 확장 할 수 있습니다.이미 내가 부탁 해요 무엇을하지 않도록 에어 브레이크는 보석 patches Rake이 구출을 허용하는

+1

내가 마지막 힌트에 관심이 있어요, 당신은 조금 확장 할 수? – Fabio

+0

레일스 프레임웍에 대한 레이크 태스크의 작동 방식을 깊이 파고 들어야합니다. 나는 세부 사항을 모른다. 그러나 당신은 당신이 좋아하는대로 할 수 있도록 분류 된 사람들을 확장 할 수 있습니다. –

13

원숭이 패치 레이크 :: 작업 #은을 포함하는 실행 설정/초기화에 task.rb 파일을 생성 예외 기능 :

module Rake 
    class Task 
    alias :orig_execute :execute 
    def execute(args=nil) 
     orig_execute(args) 
    rescue Exception => exception 
     # Exception notification stuff 
    end 
    end 
end 

Rails 3.0.12, Rake 0.9.2.2로 테스트되었습니다.

+1

"rake/task"가 필요하거나 NameError 때문에 Rails 콘솔이 더 이상 실행되지 않습니다. –

관련 문제