私は宝石の仕組みを理解しようとしています。また、宝石を作成して、レール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:
だから、とき、私のRailsアプリケーション起動すると、イニシャライザを通過します。
これは、/lib/airbrake/rails.rb
ファイルの解析が完了すると、宝石がインスタンス化され、次にどこかでAirbrake::Rails.initialize
メソッドを実行する場所ですか?
私はrailtie.rb
ファイルに初期化コードを見ることができます:それは、
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
これは、それが初期化を実行した後に、このコードを実行しているので、今意味をなさないようだとコンフィギュレーションを設定します基底クラスにControllerMethods
などを送信します。
これは、Airbrake::Rails.initialize
への呼び出しですでにApplicationController
ファイルに送信されていたコードを複製しているようです。
私は誰かが物事がどのように実行され、どのような順序でそれが明確な方法でこのプロセスがどのように機能するかわからないので、私に教えてくれることを望んでいます。
ありがとう、btw、それは同時に宝石を作成し、レールのWebアプリケーションでそれをテストすることは可能ですか?別に宝石を作りますか?このことを学びたい! – Blankman
@Blankman 'rails plugin new 'を使用すると、テスト/ダミー(または' spec/dummy')にダミーテストアプリを含むプラグインスケルトンが作成され、統合/機能テストが実行されますが、これは、私が宝石リポジトリにサンプルアプリケーションを持っているのが好きなので、私がやっていることです。 –