2011-11-20 2 views
3

저는 보석이 어떻게 작동하는지 이해하고, 레일 3 응용 프로그램에 기능을 추가하거나 추가 할 수있는 보석을 만드는 방법을 알고 싶습니다.이 보석은 오류 처리에 어떻게 연결 되나요?

http를 통해 서버에 오류를 게시하는 오류 잡기 오류입니다.

은 단순히 보석을 추가 한 다음이 API 키를 가진 초기화를 만들고 설치합니다.

지금까지 얻을,하지만 보석의 실행을 이해하는 데 도움이 필요하고 레일에 후크 방법이 부분. 내가 찾은

관련 파일은 다음과 같습니다

ActionController 클래스에 메소드를 추가

https://github.com/airbrake/airbrake/blob/master/lib/airbrake/rails.rb

:

if defined?(ActionController::Base) 
    ActionController::Base.send(:include, Airbrake::Rails::ActionControllerCatcher) 
    ActionController::Base.send(:include, Airbrake::Rails::ErrorLookup) 
    ActionController::Base.send(:include, Airbrake::Rails::ControllerMethods) 
    ActionController::Base.send(:include, Airbrake::Rails::JavascriptNotifier) 
    end 

그리고 그것을 실행 파일의 맨 아래에 :

Airbrake::Rails.initialize 


1. You add the gem to your GEMFILE, and call bundle. 
2. You run the generator which creates the initializer file: 

내 레일 애플리케이션 시작하면 이니셜 라이저를 통과합니다.

/lib/airbrake/rails.rb 파일의 구문 분석이 끝나면 보석이 인스턴스화 된 다음 어딘가에서 줄을 따라 Airbrake::Rails.initialize 메서드를 실행할 위치입니까? 그것을이가 초기화 실행 후이 코드를 실행하기 때문에 지금은 이해가 보인다 및 구성을 설정

https://github.com/airbrake/airbrake/blob/master/lib/airbrake/railtie.rb

config.after_initialize do 
    Airbrake.configure(true) do |config| 
    config.logger   ||= ::Rails.logger 
    config.environment_name ||= ::Rails.env 
    config.project_root  ||= ::Rails.root 
    config.framework  = "Rails: #{::Rails::VERSION::STRING}" 
    end 

    if defined?(::ActionController::Base) 
    require 'airbrake/rails/javascript_notifier' 
    require 'airbrake/rails/controller_methods' 

    ::ActionController::Base.send(:include, Airbrake::Rails::ControllerMethods) 
    ::ActionController::Base.send(:include, Airbrake::Rails::JavascriptNotifier) 
    end 
end 

:

나는 railtie.rb 파일의 초기화 코드를 볼 수 있습니다 ControllerMethods 등을 기본 클래스에 보냅니다.

하지만이 코드는 Airbrake::Rails.initialize으로 전화하여 이미 ApplicationController 파일로 전송 된 코드를 복제 한 것으로 보입니다.

나는 누군가가 일을 실행하고 어떤 순서로이 과정이 명확한 방식으로 작동 어떻게 그냥보고하지 않는 방법을 말해 줄 수 기대하고있다.

답변

4

중복 된 코드는 다른 버전의 레일을 지원하기 위해 여기에 나와 있습니다. 보석은 레일이 플러그인인지 아닌지

레일 2.X

레일 2.X를 결정하는 rails/init.rb을 찾습니다. 에어 브레이크의 하나는 한 줄이 포함

require 'airbrake/rails' 

다음 단계로 귀하의 요약 자리-에 있었다 :

는 보석 인스턴스화하고 다음 어딘가에 아래로 선이 에어 브레이크가 실행 곳인가 :: Rails.initialize 메서드가 완료되면 /lib/airbrake/rails.rb 파일을 구문 분석합니까?

레일 3.X

레일 3.X 플러그인은 종종 레이크 작업을 정의하는 부팅 순서 또는 do a lot of other interesting things에 연결 할 수 있도록, Rails::Railtie에서 상속합니다.

lib/airbrake.rb 체크 Railtie 클래스의 가용성에 다음 줄이 사건의 경우 Airbrake::Railtie을 정의 (확인하는 것과 당신은 레일 3을 실행하는 경우)하십시오 Railtie을 정의

require 'airbrake/railtie' if defined?(Rails::Railtie) 

, 당신 돈 수동으로 (Airbrake::Rails.initialize과 동등) 실행해야합니다. 서브 클래스 화 Rails::Railtie이면 플러그인을 만들 수 있습니다.

추가 독서 3의 모듈화를 달성 레일 방법은, 다음과 같은 문서가 매우 도움이 될 것입니다 이해하려면

:

+0

감사합니다. btw, 보석을 만들고 레일 웹 앱에서 동시에 테스트 할 수 있습니까? 또는 보석을 따로 만드나요? 이 물건을 배우고 싶다! – Blankman

+0

@Blankman'rails plugin new '을 사용하면'test/dummy' (또는'spec/dummy')에 dummy test app를 사용하여 플러그인 스켈레톤을 생성하여 통합/기능 테스트를 수행하지만,이 레일 앱을 실행할 수있는 아무 것도 없습니다. 그게 내가 보석 저장소에 예제 응용 프로그램을 가지고 있기 때문에 내가하고있는 일이다. –

관련 문제