Tôi có một ứng dụng đường ray đơn giản với một vài bộ điều khiển và một số tác vụ cào. Một vài nhiệm vụ được thực hiện bởi cron được cấu hình với whenever gem.Rails ngoại lệ thông báo trong các nhiệm vụ rake
Một trong những nhiệm vụ của tôi được thực hiện hàng ngày và đôi khi nó đặt ra một ngoại lệ và theo mặc định tôi nhận được cảnh báo này bởi cron
rake aborted!
undefined method `parameterize' for nil:NilClass
Tasks: TOP => mailboxes:clean_processed
(See full trace by running task with --trace)
Tôi muốn gỡ lỗi những gì đang xảy ra và vì lý do này Tôi vừa mới cài đặt exception notification này đá quý với dòng này trong tôi Gemfile
gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier'
và cấu hình nó trong tập tin application.rb
tôi với
# enable exception notification
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyAppName] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Vì đá quý này là một phần mềm trung gian, nó chỉ hoạt động cho các yêu cầu web chứ không phải cho các tác vụ cào. Tôi muốn kích hoạt nó cũng cho các công việc cào và tôi tìm thấy this gist mà làm công việc.
Nó hoạt động, tuy nhiên nó không khô, tôi cần phải lặp lại cấu hình đá quý trong phương pháp đó và tôi cũng cần phải thay đổi tất cả các nhiệm vụ cào của tôi để gửi kèm theo báo cáo của họ trong một khối như trong
exception_notify { actual_task_code }
Có cách tốt hơn để giải quyết vấn đề này?
P.S. Nếu tôi cần phải thay đổi đá quý thông báo sẽ không là một vấn đề bởi vì tôi chỉ thêm một vài dòng mã vào dự án của tôi.
P.P.S. Tôi biết rằng tôi cũng có thể thay đổi dòng cào trong crontab để thêm một tùy chọn --trace
, nhưng tôi không thích giải pháp đó, gây ra trình thông báo ngoại lệ imho là một giải pháp tốt hơn cũng giúp trong mã web.
Cập nhật Tôi vừa phát hiện ra câu hỏi liên quan này: exception_notification for delayed_job nhưng cả hai câu trả lời đều sử dụng một mẹo tương tự.
Tôi sẽ cố gắng với một dịch vụ trực tuyến như Airbrake (trước đây gọi là hoptoad) hoặc vượt trội, nhưng cả hai trong số họ được trả tiền dịch vụ ...
Cập nhật 2: Tôi đã thử các Airbrake App, rất ứng dụng tốt đẹp, nhưng nó phải chịu đựng cùng một vấn đề, tôi vẫn cần phải hack Rakefile để thông báo các ngoại lệ từ các nhiệm vụ rake. Tuy nhiên, hack ít khô hơn vì bạn chỉ cần mã này:
# notify exceptions
def exception_notify
yield
rescue Exception => exception
HoptoadNotifier.notify exception
raise exception
end
Không cần lặp lại bất kỳ thông số cấu hình nào. Tôi nghĩ rằng tôi không thể làm tốt hơn điều này để được thông báo về các ngoại lệ trong các nhiệm vụ cào.
Để cho phép ghi nhật ký các lỗi Rake, bạn cần thêm dòng '' 'config.rescue_rake_exceptions = true''' vào' '' conifg/initializers/airbrake.rb'''. – KurtPreston