newrelic_rpm 3.1.2.beta1 → 3.1.2.beta2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of newrelic_rpm might be problematic. Click here for more details.

data/CHANGELOG CHANGED
@@ -3,6 +3,7 @@ v3.1.2
3
3
  * Work around for Ruby 1.8.7 Marshal crash bug
4
4
  * Numerous community patches (Gabriel Horner, Bradley Harris, Diego Garcia,
5
5
  Tommy Sullivan, Greg Hazel, John Thomas Marino, Paul Elliott, Pan Thomakos)
6
+ * Fixed RUM instrumentation bug
6
7
 
7
8
  v3.1.1
8
9
  * Support for Rails 3.1 (thanks to Ben Hoskings via github)
@@ -30,7 +30,7 @@ module NewRelic
30
30
 
31
31
  # A static javascript header that is identical for every account
32
32
  # and application
33
- JS_HEADER = "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
33
+ JS_HEADER = "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
34
34
 
35
35
  # Creates a new browser configuration data. Argument is a hash
36
36
  # of configuration values from the server
@@ -63,7 +63,7 @@ module NewRelic
63
63
  # includes it themselves)
64
64
  def build_load_file_js(connect_data)
65
65
  js = <<-EOS
66
- if (!NREUMQ.f) NREUMQ.f=function() {
66
+ if (!NREUMQ.f) { NREUMQ.f=function() {
67
67
  NREUMQ.push(["load",new Date().getTime()]);
68
68
  EOS
69
69
 
@@ -79,7 +79,8 @@ EOS
79
79
  js << <<-EOS
80
80
  if(NREUMQ.a)NREUMQ.a();
81
81
  };
82
- if(window.onload!==NREUMQ.f){NREUMQ.a=window.onload;window.onload=NREUMQ.f;};
82
+ NREUMQ.a=window.onload;window.onload=NREUMQ.f;
83
+ };
83
84
  EOS
84
85
  js
85
86
  end
@@ -24,7 +24,6 @@ module NewRelic
24
24
  @errors = []
25
25
  # lookup of exception class names to ignore. Hash for fast access
26
26
  @ignore = {}
27
- @ignore_filter = nil
28
27
 
29
28
  config = NewRelic::Control.instance.fetch('error_collector', {})
30
29
 
@@ -45,10 +44,13 @@ module NewRelic
45
44
 
46
45
  # Returns the error filter proc that is used to check if an
47
46
  # error should be reported. When given a block, resets the
48
- # filter to the provided block
47
+ # filter to the provided block. The define_method() is used to
48
+ # wrap the block in a lambda so return statements don't result in a
49
+ # LocalJump exception.
49
50
  def ignore_error_filter(&block)
50
51
  if block
51
- @ignore_filter = block
52
+ self.class.class_eval { define_method(:ignore_filter_proc, &block) }
53
+ @ignore_filter = method(:ignore_filter_proc)
52
54
  else
53
55
  @ignore_filter
54
56
  end
@@ -6,8 +6,9 @@ DependencyDetection.defer do
6
6
  end
7
7
 
8
8
  depends_on do
9
+ # double check because of old JRuby bug
9
10
  defined?(::Delayed) && defined?(::Delayed::Job) &&
10
- Delayed::Job.respond_to?(:invoke_job)
11
+ Delayed::Job.method_defined?(:invoke_job)
11
12
  end
12
13
 
13
14
  executes do
@@ -67,7 +67,8 @@ module NewRelic
67
67
  end
68
68
 
69
69
  def license_key
70
- fetch('license_key', ENV['NEWRELIC_LICENSE_KEY'])
70
+ env_setting = ENV['NEW_RELIC_LICENSE_KEY'] || ENV['NEWRELIC_LICENSE_KEY']
71
+ fetch('license_key', env_setting)
71
72
  end
72
73
 
73
74
  def capture_params
@@ -45,6 +45,7 @@ module NewRelic
45
45
  #
46
46
  def init_plugin(options={})
47
47
  options['app_name'] = ENV['NEWRELIC_APP_NAME'] if ENV['NEWRELIC_APP_NAME']
48
+ options['app_name'] ||= ENV['NEW_RELIC_APP_NAME'] if ENV['NEW_RELIC_APP_NAME']
48
49
 
49
50
  # Merge the stringified options into the config as overrides:
50
51
  logger_override = options.delete(:log)
@@ -189,8 +189,8 @@ module NewRelic
189
189
  sql = params[:sql]
190
190
  return nil unless sql && params[:connection_config]
191
191
  statement = sql.split(";\n")[0] # only explain the first
192
- @explain_sql = explain_statement(statement, params[:connection_config]) || []
193
- @explain_sql
192
+ @explain_sql = explain_statement(statement, params[:connection_config])
193
+ return @explain_sql || []
194
194
  end
195
195
 
196
196
  def explain_statement(statement, config)
@@ -218,19 +218,20 @@ module NewRelic
218
218
  # that it implements each. Also: can't use select_rows because the native postgres
219
219
  # driver doesn't know that method.
220
220
 
221
- headers = values = []
221
+ headers = []
222
+ values = []
222
223
  if items.respond_to?(:each_hash)
223
224
  items.each_hash do |row|
224
225
  headers = row.keys
225
- values = headers.map{|h| row[h] }
226
+ values << headers.map{|h| row[h] }
226
227
  end
227
228
  elsif items.respond_to?(:each)
228
229
  items.each do |row|
229
230
  if row.kind_of?(Hash)
230
231
  headers = row.keys
231
- values = headers.map{|h| row[h] }
232
+ values << headers.map{|h| row[h] }
232
233
  else
233
- values = row
234
+ values << row
234
235
  end
235
236
  end
236
237
  else
@@ -4,7 +4,7 @@ module NewRelic
4
4
  MAJOR = 3
5
5
  MINOR = 1
6
6
  TINY = 2
7
- BUILD = 'beta1' # Set to nil for a release, 'beta1', 'alpha', etc for prerelease builds
7
+ BUILD = 'beta2' # Set to nil for a release, 'beta1', 'alpha', etc for prerelease builds
8
8
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
9
9
  end
10
10
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{newrelic_rpm}
8
- s.version = "3.1.2.beta1"
8
+ s.version = "3.1.2.beta2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bill Kayser", "Jon Guymon", "Justin George", "Darin Swanson"]
12
- s.date = %q{2011-08-18}
12
+ s.date = %q{2011-08-26}
13
13
  s.description = %q{New Relic is a performance management system, developed by New Relic,
14
14
  Inc (http://www.newrelic.com). New Relic provides you with deep
15
15
  information about the performance of your web application as it runs
@@ -18,7 +18,7 @@ Gem or plugin, hosted on
18
18
  http://github.com/newrelic/rpm/
19
19
  }
20
20
  s.email = %q{support@newrelic.com}
21
- s.executables = ["mongrel_rpm", "newrelic", "newrelic_cmd"]
21
+ s.executables = ["newrelic_cmd", "newrelic", "mongrel_rpm"]
22
22
  s.extra_rdoc_files = [
23
23
  "CHANGELOG",
24
24
  "LICENSE",
@@ -19,7 +19,7 @@ class NewRelic::Agent::BeaconConfigurationTest < Test::Unit::TestCase
19
19
  assert_equal('a browser monitoring key', bc.browser_monitoring_key)
20
20
  assert_equal('an application id', bc.application_id)
21
21
  assert_equal('a beacon', bc.beacon)
22
- assert_equal(109, bc.browser_timing_header.size, "should output the javascript with all the data available")
22
+ assert_equal(117, bc.browser_timing_header.size, "should output the javascript with all the data available")
23
23
  end
24
24
 
25
25
  def test_license_bytes_nil
@@ -81,21 +81,21 @@ class NewRelic::Agent::BeaconConfigurationTest < Test::Unit::TestCase
81
81
  def test_build_load_file_js_load_episodes_file_false
82
82
  connect_data = {'rum.load_episodes_file' => false}
83
83
  bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
84
- assert_equal(186, bc.build_load_file_js(connect_data).size,
84
+ assert_equal(160, bc.build_load_file_js(connect_data).size,
85
85
  "should include timing footer but not rum.js load")
86
86
  end
87
87
 
88
88
  def test_build_load_file_js_load_episodes_file_missing
89
89
  connect_data = {}
90
90
  bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
91
- assert_equal(304, bc.build_load_file_js(connect_data).size,
91
+ assert_equal(278, bc.build_load_file_js(connect_data).size,
92
92
  "should output the javascript when there is no configuration")
93
93
  end
94
94
 
95
95
  def test_build_load_file_js_load_episodes_file_present
96
96
  connect_data = {'rum.load_episodes_file' => true}
97
97
  bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
98
- assert_equal(304, bc.build_load_file_js(connect_data).size,
98
+ assert_equal(278, bc.build_load_file_js(connect_data).size,
99
99
  "should output the javascript when rum.load_episodes_file is true")
100
100
  end
101
101
 
@@ -30,13 +30,13 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
30
30
 
31
31
  def test_browser_timing_header
32
32
  header = browser_timing_header
33
- assert_equal "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
33
+ assert_equal "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
34
34
  end
35
35
 
36
36
  def test_browser_timing_header_with_rum_enabled_not_specified
37
37
  NewRelic::Agent.instance.expects(:beacon_configuration).at_least_once.returns( NewRelic::Agent::BeaconConfiguration.new({"browser_key" => "browserKey", "application_id" => "apId", "beacon"=>"beacon", "episodes_url"=>"this_is_my_file"}))
38
38
  header = browser_timing_header
39
- assert_equal "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
39
+ assert_equal "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
40
40
  end
41
41
 
42
42
  def test_browser_timing_header_with_rum_enabled_false
@@ -68,7 +68,7 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
68
68
  Thread.current[:newrelic_start_time] = Time.now
69
69
 
70
70
  footer = browser_timing_footer
71
- snippet = '<script type="text/javascript">if (!NREUMQ.f) NREUMQ.f=function() {
71
+ snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
72
72
  NREUMQ.push(["load",new Date().getTime()]);
73
73
  var e=document.createElement("script");'
74
74
  assert footer.include?(snippet), "Expected footer to include snippet: #{snippet}, but instead was #{footer}"
@@ -103,7 +103,7 @@ var e=document.createElement("script");'
103
103
  config.expects(:license_bytes).returns(license_bytes)
104
104
  NewRelic::Agent.instance.expects(:beacon_configuration).returns(config).at_least_once
105
105
  footer = browser_timing_footer
106
- beginning_snippet = '<script type="text/javascript">if (!NREUMQ.f) NREUMQ.f=function() {
106
+ beginning_snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
107
107
  NREUMQ.push(["load",new Date().getTime()]);
108
108
  var e=document.createElement("script");'
109
109
  ending_snippet = "])</script>"
@@ -238,7 +238,7 @@ var e=document.createElement("script");'
238
238
  self.expects(:obfuscate).with('most recent transaction').returns('most recent transaction')
239
239
 
240
240
  value = footer_js_string(beacon, license_key, application_id)
241
- assert_equal("<script type=\"text/javascript\">if (!NREUMQ.f) NREUMQ.f=function() {\nNREUMQ.push([\"load\",new Date().getTime()]);\nvar e=document.createElement(\"script\");\ne.type=\"text/javascript\";e.async=true;e.src=\"this_is_my_file\";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nif(window.onload!==NREUMQ.f){NREUMQ.a=window.onload;window.onload=NREUMQ.f;};\nNREUMQ.push([\"nrf2\",\"\",\"\",1,\"most recent transaction\",0,0,new Date().getTime()])</script>", value, "should return the javascript given some default values")
241
+ assert_equal("<script type=\"text/javascript\">if (!NREUMQ.f) { NREUMQ.f=function() {\nNREUMQ.push([\"load\",new Date().getTime()]);\nvar e=document.createElement(\"script\");\ne.type=\"text/javascript\";e.async=true;e.src=\"this_is_my_file\";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nNREUMQ.a=window.onload;window.onload=NREUMQ.f;\n};\nNREUMQ.push([\"nrf2\",\"\",\"\",1,\"most recent transaction\",0,0,new Date().getTime()])</script>", value, "should return the javascript given some default values")
242
242
  end
243
243
 
244
244
  def test_html_safe_if_needed_unsafed
@@ -144,22 +144,29 @@ class NewRelic::Agent::ErrorCollectorTest < Test::Unit::TestCase
144
144
  end
145
145
 
146
146
  def test_exclude_block
147
- @error_collector.ignore_error_filter do |e|
148
- if e.is_a? IOError
149
- nil
150
- else
151
- e
152
- end
153
- end
154
-
147
+ NewRelic::Agent.logger.expects(:error).never
148
+ @error_collector.ignore_error_filter &wrapped_filter_proc
149
+
155
150
  @error_collector.notice_error(IOError.new("message"), :metric => 'path', :request_params => {:x => 'y'})
156
-
151
+ @error_collector.notice_error(Exception.new("message"), :metric => 'path', :request_params => {:x => 'y'})
152
+
157
153
  errors = @error_collector.harvest_errors([])
158
154
 
159
- assert_equal 0, errors.length
155
+ assert_equal 1, errors.length
160
156
  end
161
157
 
162
158
  private
159
+
160
+ def wrapped_filter_proc
161
+ Proc.new do |e|
162
+ if e.is_a? IOError
163
+ return nil
164
+ else
165
+ return e
166
+ end
167
+ end
168
+ end
169
+
163
170
  def silence_stream(*args)
164
171
  super
165
172
  rescue NoMethodError
@@ -399,7 +399,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
399
399
  assert explanation[0].include?(c)
400
400
  end
401
401
  ['1', 'SIMPLE', ActiveRecordFixtures::Order.table_name].each do |c|
402
- assert explanation[1].include?(c)
402
+ assert explanation[1][0].include?(c)
403
403
  end
404
404
 
405
405
  s = NewRelic::Agent.get_stats("ActiveRecord/ActiveRecordFixtures::Order/find")
@@ -161,6 +161,7 @@ class NewRelic::DataSerializationTest < Test::Unit::TestCase
161
161
  snd.write(data[0,data.size/2])
162
162
  sleep(0.1)
163
163
  snd.write(data[(data.size/2)..-1])
164
+ snd.close
164
165
  end
165
166
 
166
167
  read = Thread.new do
@@ -176,15 +177,10 @@ class NewRelic::DataSerializationTest < Test::Unit::TestCase
176
177
  end
177
178
  end
178
179
 
179
- begin
180
- Timeout::timeout(1) do
181
- write.join
182
- read.join
183
- gc.join
184
- end
185
- rescue Timeout::Error
186
- # rubinius deadlocks which seems to be a rubinius bug
187
- raise unless NewRelic::LanguageSupport.using_rubinius?
180
+ Timeout::timeout(5) do
181
+ write.join
182
+ read.join
183
+ gc.join
188
184
  end
189
185
  # should not seg fault
190
186
  end
@@ -391,28 +391,30 @@ class NewRelic::TransactionSample::SegmentTest < Test::Unit::TestCase
391
391
  NewRelic::TransactionSample.expects(:get_connection).with(config).returns(connection)
392
392
 
393
393
  assert_equal(plan.keys.sort, s.explain_sql[0].sort)
394
- assert_equal(plan.values.compact.sort, s.explain_sql[1].compact.sort)
394
+ assert_equal(plan.values.compact.sort, s.explain_sql[1][0].compact.sort)
395
395
  end
396
396
 
397
- # this basically casts the resultset to an array of rows, which are
398
- # arrays of columns
399
397
  def test_process_resultset
400
398
  s = NewRelic::TransactionSample::Segment.new(Time.now, 'Custom/test/metric', nil)
401
- items = [["column"]]
402
- assert_equal([nil, ["column"]], s.process_resultset(items))
399
+ resultset = [["column"]]
400
+ assert_equal([nil, [["column"]]], s.process_resultset(resultset))
403
401
  end
404
402
 
405
403
  def test_explain_sql_one_select_with_pg_connection
406
404
  s = NewRelic::TransactionSample::Segment.new(Time.now, 'Custom/test/metric', nil)
407
405
  config = {:adapter => 'postgresql'}
408
406
  config.default('val')
409
- s.params = {:sql => "SELECT true()", :connection_config => config}
407
+ s.params = {:sql => "select count(id) from blogs limit 1;", :connection_config => config}
410
408
  connection = mock('connection')
411
- # two rows, two columns
412
- connection.expects(:execute).returns([{"QUERY PLAN"=>"Seq Scan on foo (cost=0.00..11.40 rows=140 width=540)"}])
409
+ plan = [{"QUERY PLAN"=>"Limit (cost=11.75..11.76 rows=1 width=4)"},
410
+ {"QUERY PLAN"=>" -> Aggregate (cost=11.75..11.76 rows=1 width=4)"},
411
+ {"QUERY PLAN"=>" -> Seq Scan on blogs (cost=0.00..11.40 rows=140 width=4)"}]
412
+ connection.expects(:execute).returns(plan)
413
413
  NewRelic::TransactionSample.expects(:get_connection).with(config).returns(connection)
414
414
  assert_equal([['QUERY PLAN'],
415
- ['Seq Scan on foo (cost=0.00..11.40 rows=140 width=540)']],
415
+ [["Limit (cost=11.75..11.76 rows=1 width=4)"],
416
+ [" -> Aggregate (cost=11.75..11.76 rows=1 width=4)"],
417
+ [" -> Seq Scan on blogs (cost=0.00..11.40 rows=140 width=4)"]]],
416
418
  s.explain_sql)
417
419
  end
418
420
 
@@ -84,7 +84,7 @@ class NewRelic::TransactionSampleTest < Test::Unit::TestCase
84
84
  explanation = segment.params[:explain_plan]
85
85
 
86
86
  assert_kind_of Array, explanation
87
- assert_equal([nil, ["QUERY RESULT"]], explanation)
87
+ assert_equal([nil, [["QUERY RESULT"]]], explanation)
88
88
  end
89
89
  end
90
90
  end
metadata CHANGED
@@ -1,10 +1,17 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: newrelic_rpm
3
- version: !ruby/object:Gem::Version
4
- version: 3.1.2.beta1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 62196423
5
5
  prerelease: 6
6
+ segments:
7
+ - 3
8
+ - 1
9
+ - 2
10
+ - beta
11
+ - 2
12
+ version: 3.1.2.beta2
6
13
  platform: ruby
7
- authors:
14
+ authors:
8
15
  - Bill Kayser
9
16
  - Jon Guymon
10
17
  - Justin George
@@ -12,67 +19,73 @@ authors:
12
19
  autorequire:
13
20
  bindir: bin
14
21
  cert_chain: []
15
- date: 2011-08-18 00:00:00.000000000 -07:00
22
+
23
+ date: 2011-08-26 00:00:00 -07:00
16
24
  default_executable:
17
- dependencies:
18
- - !ruby/object:Gem::Dependency
25
+ dependencies:
26
+ - !ruby/object:Gem::Dependency
19
27
  name: jeweler
20
- requirement: &2164283560 !ruby/object:Gem::Requirement
28
+ prerelease: false
29
+ requirement: &id001 !ruby/object:Gem::Requirement
21
30
  none: false
22
- requirements:
23
- - - ! '>='
24
- - !ruby/object:Gem::Version
25
- version: '0'
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ hash: 3
35
+ segments:
36
+ - 0
37
+ version: "0"
26
38
  type: :development
27
- prerelease: false
28
- version_requirements: *2164283560
29
- - !ruby/object:Gem::Dependency
39
+ version_requirements: *id001
40
+ - !ruby/object:Gem::Dependency
30
41
  name: mocha
31
- requirement: &2155997140 !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
32
44
  none: false
33
- requirements:
34
- - - ! '>='
35
- - !ruby/object:Gem::Version
36
- version: '0'
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
37
52
  type: :development
38
- prerelease: false
39
- version_requirements: *2155997140
40
- - !ruby/object:Gem::Dependency
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
41
55
  name: shoulda
42
- requirement: &2155996160 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
43
58
  none: false
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
48
66
  type: :development
49
- prerelease: false
50
- version_requirements: *2155996160
51
- description: ! 'New Relic is a performance management system, developed by New Relic,
52
-
67
+ version_requirements: *id003
68
+ description: |
69
+ New Relic is a performance management system, developed by New Relic,
53
70
  Inc (http://www.newrelic.com). New Relic provides you with deep
54
-
55
71
  information about the performance of your web application as it runs
56
-
57
72
  in production. The New Relic Ruby Agent is dual-purposed as a either a
58
-
59
73
  Gem or plugin, hosted on
60
-
61
74
  http://github.com/newrelic/rpm/
62
75
 
63
- '
64
76
  email: support@newrelic.com
65
- executables:
66
- - mongrel_rpm
67
- - newrelic
77
+ executables:
68
78
  - newrelic_cmd
79
+ - newrelic
80
+ - mongrel_rpm
69
81
  extensions: []
70
- extra_rdoc_files:
82
+
83
+ extra_rdoc_files:
71
84
  - CHANGELOG
72
85
  - LICENSE
73
86
  - README.rdoc
74
87
  - newrelic.yml
75
- files:
88
+ files:
76
89
  - CHANGELOG
77
90
  - LICENSE
78
91
  - README.rdoc
@@ -327,38 +340,60 @@ files:
327
340
  has_rdoc: true
328
341
  homepage: http://www.github.com/newrelic/rpm
329
342
  licenses: []
330
- post_install_message: ! "\nPLEASE NOTE:\n\nDeveloper Mode is now a Rack middleware.\n\nDeveloper
331
- Mode is no longer available in Rails 2.1 and earlier.\nHowever, starting in version
332
- 2.12 you can use Developer Mode in any\nRack based framework, in addition to Rails.
333
- \ To install developer mode\nin a non-Rails application, just add NewRelic::Rack::DeveloperMode
334
- to\nyour middleware stack.\n\nIf you are using JRuby, we recommend using at least
335
- version 1.4 or \nlater because of issues with the implementation of the timeout
336
- library.\n\nRefer to the README.md file for more information.\n\nPlease see http://github.com/newrelic/rpm/blob/master/CHANGELOG\nfor
337
- a complete description of the features and enhancements available\nin version 3.1
338
- of the Ruby Agent.\n \n"
339
- rdoc_options:
343
+
344
+ post_install_message: |
345
+
346
+ PLEASE NOTE:
347
+
348
+ Developer Mode is now a Rack middleware.
349
+
350
+ Developer Mode is no longer available in Rails 2.1 and earlier.
351
+ However, starting in version 2.12 you can use Developer Mode in any
352
+ Rack based framework, in addition to Rails. To install developer mode
353
+ in a non-Rails application, just add NewRelic::Rack::DeveloperMode to
354
+ your middleware stack.
355
+
356
+ If you are using JRuby, we recommend using at least version 1.4 or
357
+ later because of issues with the implementation of the timeout library.
358
+
359
+ Refer to the README.md file for more information.
360
+
361
+ Please see http://github.com/newrelic/rpm/blob/master/CHANGELOG
362
+ for a complete description of the features and enhancements available
363
+ in version 3.1 of the Ruby Agent.
364
+
365
+
366
+ rdoc_options:
340
367
  - --line-numbers
341
368
  - --inline-source
342
369
  - --title
343
370
  - New Relic Ruby Agent
344
- require_paths:
371
+ require_paths:
345
372
  - lib
346
- required_ruby_version: !ruby/object:Gem::Requirement
373
+ required_ruby_version: !ruby/object:Gem::Requirement
347
374
  none: false
348
- requirements:
349
- - - ! '>='
350
- - !ruby/object:Gem::Version
351
- version: '0'
352
- required_rubygems_version: !ruby/object:Gem::Requirement
375
+ requirements:
376
+ - - ">="
377
+ - !ruby/object:Gem::Version
378
+ hash: 3
379
+ segments:
380
+ - 0
381
+ version: "0"
382
+ required_rubygems_version: !ruby/object:Gem::Requirement
353
383
  none: false
354
- requirements:
355
- - - ! '>='
356
- - !ruby/object:Gem::Version
357
- version: '0'
384
+ requirements:
385
+ - - ">="
386
+ - !ruby/object:Gem::Version
387
+ hash: 3
388
+ segments:
389
+ - 0
390
+ version: "0"
358
391
  requirements: []
392
+
359
393
  rubyforge_project:
360
- rubygems_version: 1.6.2
394
+ rubygems_version: 1.4.2
361
395
  signing_key:
362
396
  specification_version: 3
363
397
  summary: New Relic Ruby Agent
364
398
  test_files: []
399
+