Я пытаюсь понять, как работают гемы и как вы можете создать гем для переопределения или добавления дополнительных функций в приложение rails 3.
Это ловушка для ошибок, которая отправляет сообщения об ошибках через http на сервер.
Чтобы установить его, вы просто добавляете гем, а затем он создает инициализатор с вашим ключом API.
Эта часть дошла до меня, но мне нужна помощь, чтобы понять, как работает самоцвет и как он зацепляется за рельсы.
Соответствующий файл, который я нашел:
https://github.com/airbrake/airbrake/blob/master/lib/airbrake/rails.rb
Где он добавляет методы к классу ActionController
:
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 запускается, оно проходит через инициализатор.
Это где экземпляр будет создан, а затем где-нибудь в конце строки запустит метод Airbrake::Rails.initialize
, когда он завершит анализ файла /lib/airbrake/rails.rb
?
Я вижу код инициализатора в файле 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
и т. Д. В базовый класс.
Но, похоже, это дублирует код, который я выложил ранее, когда вещи уже отправлялись в файл ApplicationController
при вызове Airbrake::Rails.initialize
.
Я надеюсь, что кто-то может сказать мне, как все происходит, и в каком порядке, поскольку я просто не понимаю, как этот процесс работает четко.