class NewRelic::Control::Frameworks::Rails
Control subclass instantiated when Rails is detected. Contains Rails specific configuration, instrumentation, environment values, etc.
Public Instance Methods
env()
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 13 def env @env ||= RAILS_ENV.dup end
init_config(options={})
click to toggle source
In versions of Rails prior to 2.0, the rails config was only available to the init.rb, so it had to be passed on from there. This is a best effort to find a config and use that.
# File lib/new_relic/control/frameworks/rails.rb, line 45 def init_config(options={}) @config = options[:config] # Install the dependency detection, if rails_config && ::Rails.configuration.respond_to?(:after_initialize) rails_config.after_initialize do # This will insure we load all the instrumentation as late as possible. If the agent # is not enabled, it will load a limited amount of instrumentation. DependencyDetection.detect! end end if !Agent.config[:agent_enabled] # Might not be running if it does not think mongrel, thin, passenger, etc # is running, if it thinks it's a rake task, or if the agent_enabled is false. ::NewRelic::Agent.logger.info("New Relic Agent not running.") else install_developer_mode(rails_config) if Agent.config[:developer_mode] install_browser_monitoring(rails_config) install_agent_hooks(rails_config) end rescue => e ::NewRelic::Agent.logger.error("Failure during init_config for Rails. Is Rails required in a non-Rails app? Set NEW_RELIC_FRAMEWORK=ruby to avoid this message.", "The Ruby agent will continue running, but Rails-specific features may be missing.", e) end
install_agent_hooks(config)
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 70 def install_agent_hooks(config) return if @agent_hooks_installed @agent_hooks_installed = true return if config.nil? || !config.respond_to?(:middleware) begin require 'new_relic/rack/agent_hooks' return unless NewRelic::Rack::AgentHooks.needed? config.middleware.use NewRelic::Rack::AgentHooks ::NewRelic::Agent.logger.debug("Installed New Relic Agent Hooks middleware") rescue => e ::NewRelic::Agent.logger.warn("Error installing New Relic Agent Hooks middleware", e) end end
install_browser_monitoring(config)
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 84 def install_browser_monitoring(config) return if @browser_monitoring_installed @browser_monitoring_installed = true return if config.nil? || !config.respond_to?(:middleware) || !Agent.config[:'browser_monitoring.auto_instrument'] begin require 'new_relic/rack/browser_monitoring' config.middleware.use NewRelic::Rack::BrowserMonitoring ::NewRelic::Agent.logger.debug("Installed New Relic Browser Monitoring middleware") rescue => e ::NewRelic::Agent.logger.warn("Error installing New Relic Browser Monitoring middleware", e) end end
install_developer_mode(rails_config)
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 97 def install_developer_mode(rails_config) return if @installed @installed = true if rails_config && rails_config.respond_to?(:middleware) begin require 'new_relic/rack/developer_mode' rails_config.middleware.use NewRelic::Rack::DeveloperMode ::NewRelic::Agent.logger.info("New Relic Agent Developer Mode enabled.") if env == "production" ::NewRelic::Agent.logger.warn("***New Relic Developer Mode is not intended to be enabled in production environments! We highly recommend setting developer_mode: false for the production environment in your newrelic.yml.") end rescue => e ::NewRelic::Agent.logger.warn("Error installing New Relic Developer Mode", e) end elsif rails_config ::NewRelic::Agent.logger.warn("Developer mode not available for Rails versions prior to 2.2") end end
rails_config()
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 34 def rails_config if defined?(::Rails) && ::Rails.respond_to?(:configuration) ::Rails.configuration else @config end end
rails_root()
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 30 def rails_root RAILS_ROOT if defined?(RAILS_ROOT) end
rails_version()
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 116 def rails_version @rails_version ||= NewRelic::VersionNumber.new(::Rails::VERSION::STRING) end
root()
click to toggle source
Rails can return an empty string from this method, causing the agent not to start even when it is properly in a rails 3 application, so we test the value to make sure it actually has contents, and bail to the parent class if it is empty.
Calls superclass method
NewRelic::Control::Frameworks::Ruby#root
# File lib/new_relic/control/frameworks/rails.rb, line 21 def root root = rails_root.to_s if !root.empty? root else super end end
Protected Instance Methods
install_shim()
click to toggle source
Calls superclass method
NewRelic::Control::Instrumentation#install_shim
# File lib/new_relic/control/frameworks/rails.rb, line 126 def install_shim super require 'new_relic/agent/instrumentation/controller_instrumentation' if ActiveSupport.respond_to?(:on_load) # rails 3+ ActiveSupport.on_load(:action_controller) { include NewRelic::Agent::Instrumentation::ControllerInstrumentation::Shim } else ActionController::Base.class_eval { include NewRelic::Agent::Instrumentation::ControllerInstrumentation::Shim } end end
rails_vendor_root()
click to toggle source
# File lib/new_relic/control/frameworks/rails.rb, line 122 def rails_vendor_root File.join(root,'vendor','rails') end