2011-09-26 22 views
10

Tôi thấy rất khó để gửi ngoại lệ cho ứng dụng Rails 3 của mình thông qua đá quý Airbrake. Lúc đầu, tôi nghĩ rằng có một lỗi cấu hình Airbrake trên phần của tôi, nhưng sau khi thử và sai và đọc tài liệu (https://github.com/thoughtbot/airbrake#readme) rất chặt chẽ, tôi phát hiện ra rằng Airbrake không báo cáo lỗi khi một ứng dụng đang chạy trong môi trường phát triển. Nó báo cáo lỗi khi ứng dụng đang chạy trong môi trường sản xuất.Làm thế nào để cấu hình Airbrake gem để ghi lại tất cả các ngoại lệ Rails trong cả môi trường phát triển và sản xuất?

Có cờ để tạo tệp cấu hình Airbrake tự động bao gồm môi trường phát triển trong danh sách môi trường mà thông báo không được gửi không?

Hiện nay tôi đang thực hiện các lệnh được liệt kê trong README

script/rails generate airbrake --api-key your_key_here 

Trả lời

18

Thẳng thắn.

config.consider_all_requests_local  = false 

thay vì

config.consider_all_requests_local  = true 

trong config/environments/development.rb của bạn. Trong trường hợp của tôi, giống như tôi nghi ngờ ở nhiều người khác, nó chỉ là một sự thay đổi tạm thời để tôi có thể "kiểm tra" của Airbrake notify_airbrake.

Bạn cần config.development_environments = [] trong airbrake.rb

+20

Tôi nên chỉ ra rằng ngoài ra bạn ** cần ** config.development_environments = [] 'trong' airbrake.rb'! –

+0

Một điều nữa là, đối với lỗi hiển thị trong airbrake, nó phải đến từ tên miền phụ bạn đã cấu hình trong cài đặt tài khoản airbrake của bạn (ví dụ: có thể không phải là 'localhost'). Bạn có thể sử dụng '/ etc/hosts' để cung cấp cho mình một miền phù hợp (ví dụ: dev.example.com). Điều này là cần thiết ngoài hai điều khác. – connec

14

Không chắc về một tùy chọn cấu hình, nhưng bạn có thể gửi một cách rõ ràng thông báo để Airbrake từ một bộ điều khiển sử dụng

notify_airbrake(exception) 

Vì vậy, để làm điều này trong phát triển, bạn có thể bắt tất cả các lỗi trong application_controller của bạn, gửi một thông báo và sau đó xử lý các lỗi như trước. Hãy xem rescue_from để bắt đầu. Đây là cách tôi thực hiện việc này để nhận thông báo từ môi trường dàn dựng của mình (hoặc, chính xác là bất kỳ môi trường nào khác với phát triển và thử nghiệm).

class ApplicationController < ActionController::Base 

    rescue_from Exception, :with => :render_error 

    private 

    def render_error(exception) 
    render :file => "#{Rails.root}/public/500.html", :layout => false, :status => 500 
    logger.error(exception) 
    notify_airbrake(exception) unless Rails.env.development? || Rails.env.test? 
    end 
end 
+1

Đây là nơi tuyệt vời để bắt đầu. Khi tôi thêm một phương thức rescue_from cho Exception, tôi thấy rằng tệp 500.html đã được hiển thị và bản ghi được ghi vào, như được chỉ rõ trong hai dòng đầu tiên của khối. Thật không may, notify_airbrake không hoạt động trong môi trường phát triển hoặc mặc định, chỉ trong sản xuất (ngay cả sau khi tôi đã loại bỏ điều kiện trừ). –

+0

Tôi nghĩ rằng giải pháp lý tưởng của tôi nằm ở đâu đó trong lớp 'Airbrake :: Configuration', đặc biệt là đối tượng' development_environments'. http://rdoc.info/github/thoughtxt/airbrake/master/Airbrake/Configuration#development_environments-instance_method –

+0

Vui lòng xem bên dưới để có câu trả lời bổ sung! –

Các vấn đề liên quan