aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Default new apps to tag logs with `request_id`schneems2016-01-062-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In high volume applications it can be very difficult to figure out what is happening in logs because each request is not easily identified. For example 3 requests could look something like this: ``` Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 Rendered welcome/index.html.erb within layouts/application (0.1ms) Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:22 +0000 Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:23 +0000 Rendered welcome/index.html.erb within layouts/application (0.1ms) Processing by WelcomeController#index as HTML Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) Processing by WelcomeController#index as HTML Rendered welcome/index.html.erb within layouts/application (0.1ms) Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) Processing by WelcomeController#index as HTML Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` The `:request_id` log tag ensures that each request is tagged with a unique identifier. While they are still interleaved it is possible to figure out which lines belong to which requests. Like: ``` [c6034478-4026-4ded-9e3c-088c76d056f1] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 [c6034478-4026-4ded-9e3c-088c76d056f1] Rendered welcome/index.html.erb within layouts/application (0.1ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:22 +0000 [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:23 +0000 [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Rendered welcome/index.html.erb within layouts/application (0.1ms) [c6034478-4026-4ded-9e3c-088c76d056f1] Processing by WelcomeController#index as HTML [c6034478-4026-4ded-9e3c-088c76d056f1] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Processing by WelcomeController#index as HTML [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Rendered welcome/index.html.erb within layouts/application (0.1ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Processing by WelcomeController#index as HTML [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` Now if you have the logs and you find this unique ID you can filter to only look at information from that request. So a filtered log output would be very clear: ``` [c6034478-4026-4ded-9e3c-088c76d056f1] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 [c6034478-4026-4ded-9e3c-088c76d056f1] Rendered welcome/index.html.erb within layouts/application (0.1ms) [c6034478-4026-4ded-9e3c-088c76d056f1] Processing by WelcomeController#index as HTML [c6034478-4026-4ded-9e3c-088c76d056f1] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` In addition to this benefit the `:request_id` can be set via the `X-Request-ID` header so that the same request could be traced between multiple components. For example a request comes in Nginx (or another load balancer) could assign a request id. As the load balancer processes the request I can log using that id, then when the request is passed on to Rails, the same id is used. That way if a problem is determined to be not caused in Rails it could be traced back to other components with the same ID. You can set a value in nginx for example using something like this: ``` location / { proxy_pass http://upstream; proxy_set_header X-Request-Id $pid-$msec-$remote_addr-$request_length; } # http://stackoverflow.com/questions/17748735/setting-a-trace-id-in-nginx-load-balancer ``` Heroku sets this header value so problems like timeouts that are logged by like router can be traced back to specific request within the application. Whether you are using components that are setting request ID or not, all production applications can benefit from the additional debugging information of having a unique identifier for all requests. This change will only affect new applications, anyone can opt out by commenting or removing the line in `config/production.rb`.
* Merge pull request #22945 from kamipo/refactor_connection_insert_sqlRafael França2016-01-064-35/+10
|\ | | | | Refactor `connection.insert_sql`
| * Refactor `connection.insert_sql`Ryuta Kamizono2016-01-074-35/+10
|/ | | | `connection.insert_sql` is almost the same as `connection.insert`.
* Merge pull request #22933 from schneems/schneems/fix-broadcastRichard Schneeman2016-01-066-50/+48
|\ | | | | [close #22917] Don't output to `STDOUT` twice
| * Remove unused instance variableschneems2016-01-061-1/+0
| |
| * [close #22917] Don't output to `STDOUT` twiceschneems2016-01-064-7/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When `rails console` or `rails server` are used along with a logger set to output to `STDOUT` then the contents will show up twice. This happens because the logger is extended with `ActiveSupportLogger.broadcast` with a destination of STDOUT even if it is already outputting to `STDOUT`. Previously PR #22592 attempted to fix this issue, but it ended up causing NoMethodErrors. A better approach than relying on adding a method and flow control is to inspect the log destination directly. For this `ActiveSupport::Logger.logger_outputs_to?` was introduced ```ruby logger = Logger.new(STDOUT) ActiveSupport::Logger.logger_outputs_to?(logger, STDOUT) # => true ``` To accomplish this we must look inside of an instance variable of standard lib's Logger `@logdev`. There is a related Ruby proposal to expose this method in a standard way: https://bugs.ruby-lang.org/issues/11955
| * Revert "Add Logger option to disable message broadcasts"schneems2016-01-053-45/+22
| | | | | | | | This reverts related commits due to #22917.
* | Merge pull request #22941 from lsylvester/pg-remove-index-legacyMatthew Draper2016-01-072-2/+19
|\ \ | | | | | | Fix remove_index for postgresql when running legacy migrations
| * | fix remove_index for postgresql when running legacy migrationsLachlan Sylvester2016-01-062-2/+19
| | |
* | | Merge pull request #22940 from ↵Matthew Draper2016-01-072-3/+0
|\ \ \ | |/ / |/| | | | | | | | lsylvester/activemodel-depends-on-builder-but-doesnt-use-it remove activemodel dependency on builder
| * | remove activemodel dependency on builderLachlan Sylvester2016-01-062-3/+0
|/ /
* | Merge pull request #22939 from ↵Rafael França2016-01-063-1/+14
|\ \ | | | | | | | | | | | | y-yagi/make_generated_controller_test_file_work_correctly make generated controller test work correctly
| * | make generated controller test work correctlyyuuji.yaginuma2016-01-063-1/+14
| | | | | | | | | | | | | | | | | | | | | Since the `#file_name` that not consideration for the namespace, if generate a controller with a namespace, not the correct url helper generation, it had become an error to run the test. Modified to generate the correct url helper, even if it is produced a namespace with controller.
* | | Merge pull request #22921 from prathamesh-sonpatki/fix-add-referenceRafael França2016-01-061-0/+1
|\ \ \ | | | | | | | | Autoload ReferenceDefinition class in abstract adapter so that it can be used by #add_reference in schema_statements
| * | | Autoload ReferenceDefinition class in abstract adapter so that it can be ↵Prathamesh Sonpatki2016-01-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | used by #add_reference in schema_statements - Fixes #22916.
* | | | Merge pull request #21688 from kamipo/add_text_and_blob_shorthand_methodsRafael Mendonça França2016-01-063-10/+53
|\ \ \ \ | | | | | | | | | | | | | | | Add short-hand methods for text and blob types in MySQL
| * | | | Add short-hand methods for text and blob types in MySQLRyuta Kamizono2016-01-053-10/+53
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Pg and Sqlite3, `:text` and `:binary` have variable unlimited length. But in MySQL, these have limited length for each types (ref #21591, #21619). This change adds short-hand methods for each text and blob types. Example: create_table :foos do |t| t.tinyblob :tiny_blob t.mediumblob :medium_blob t.longblob :long_blob t.tinytext :tiny_text t.mediumtext :medium_text t.longtext :long_text end
* | | | Merge pull request #22275 from mastahyeti/per-form-csrfRafael França2016-01-069-18/+253
|\ \ \ \ | | | | | | | | | | Per-form CSRF tokens
| * | | | add option for per-form CSRF tokensBen Toews2016-01-049-18/+253
| | | | |
* | | | | Merge pull request #22938 from sblackstone/masterRafael França2016-01-062-1/+17
|\ \ \ \ \ | | | | | | | | | | | | Provide a better error message if a user mistypes the name of script …
| * | | | | Provide a better error message if a user mistypes the name of script with runnerStephen Blackstone2016-01-052-1/+17
|/ / / / / | | | | | | | | | | | | | | | Add tests for detecting bad options for runner
* | | | | Move CHANGELOG entry to Active RecordRafael Mendonça França2016-01-052-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While the type definition is in Active Model the change of behavior will be only user facing in Active Record so better to put the entry in its changelog. [ci skip]
* | | | | Merge pull request #20544 from Envek/fix_utc_offset_for_time_attributesRafael França2016-01-053-1/+9
|\ \ \ \ \ | | | | | | | | | | | | Take UTC offset into account when assigning string value to time attributes.
| * | | | | Take UTC offset into account when assigning string value to time attribute.Andrey Novikov2016-01-053-1/+9
| | | | | |
* | | | | | Merge pull request #22920 from kamipo/fix_connection_createRafael França2016-01-055-9/+13
|\ \ \ \ \ \ | |_|_|_|_|/ |/| | | | | Fix `connection#create` in PG adapter
| * | | | | Fix `connection#create` in PG adapterRyuta Kamizono2016-01-055-9/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Originally `connection#create` had aliased to `connection#insert` in PG adapter. But it was broken by #7447. Re-alias `create` to `insert` for fixing it.
* | | | | | Prefer inspect over escaping and sorround by quote marksSantiago Pastorino2016-01-051-3/+1
| | | | | |
* | | | | | Add Html template handler that wraps Raw output in an OutputBufferSantiago Pastorino2016-01-055-2/+21
| |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the case when you try to render an html you know safe and the file is named something.html. With this commit the content of the html won't be escaped anymore because AV won't use Raw handler and choose Html handler instead.
* | | | | Merge pull request #22922 from vhf/add_fpb_backClaudio B2016-01-051-0/+1
|\ \ \ \ \ | | | | | | | | | | | | [ci skip] Update doc/resource link removed by #21211
| * | | | | [ci skip] Update doc/resource link removed by #21211Victor Felder2016-01-051-0/+1
| | |_|_|/ | |/| | |
* | | | | Merge pull request #22927 from jmgcrespo/jmgcrespo-patch-1Claudio B2016-01-051-2/+2
|\ \ \ \ \ | |/ / / / |/| | | | [ci skip] Add job suffix to sample's job file name
| * | | | Add job suffix to sample's job file nameManu2016-01-051-2/+2
|/ / / /
* | | / :scissors: Unnecessary spacing in the generated codeAkira Matsuda2016-01-051-1/+1
| |_|/ |/| |
* | | Merge pull request #22896 from kamipo/fix_unsigned_and_blob_or_text_columnRafael França2016-01-043-5/+16
|\ \ \ | | | | | | | | Fix `unsigned?` and `blob_or_text_column` for Enum columns in MySQL
| * | | Fix `unsigned?` and `blob_or_text_column?` for Enum columns in MySQLRyuta Kamizono2016-01-043-5/+16
| | | |
* | | | Merge pull request #22906 from bf4/rendering_exceptionsRafael França2016-01-043-88/+163
|\ \ \ \ | | | | | | | | | | Add ActionController:Renderers test
| * | | | Group related methods togetherBenjamin Fleischer2016-01-031-67/+67
| | | | |
| * | | | Add ActionController:Renderers testBenjamin Fleischer2016-01-033-24/+99
| | | | | | | | | | | | | | | | | | | | To complement actionpack/test/controller/metal/renderers_test.rb
* | | | | Merge pull request #22550 from tamird/record-fetch-warning-allocate-lessSean Griffin2016-01-045-20/+24
|\ \ \ \ \ | |_|_|/ / |/| | | | activerecord: allocate fewer objects
| * | | | activerecord: reuse immutable objectsTamir Duberstein2016-01-044-14/+20
| | | | |
| * | | | activerecord: allocate fewer arrays in `RecordFetchWarning`Tamir Duberstein2016-01-041-6/+4
| | |/ / | |/| |
* | | | Merge pull request #22915 from kamipo/fix_user_name_in_docEileen M. Uchitelle2016-01-041-1/+1
|\ \ \ \ | |_|_|/ |/| | | Fix user name in doc [ci skip]
| * | | Fix user name in doc [ci skip]Ryuta Kamizono2015-12-311-1/+1
| | | |
* | | | Update the maintenance policy for the next release.Rafael Mendonça França2016-01-041-3/+3
| | | |
* | | | Merge pull request #22821 from shosti/set-null-transactionArthur Nogueira Neves2016-01-042-0/+6
|\ \ \ \ | | | | | | | | | | Allow add_to_transaction with null transaction
| * | | | Allow add_to_transaction with null transactionEmanuel Evans2015-12-282-0/+6
| | | | | | | | | | | | | | | | | | | | Fixes https://github.com/rails/rails/issues/22819
* | | | | Merge pull request #22764 from ↵Rafael França2016-01-043-3/+43
|\ \ \ \ \ | |_|_|/ / |/| | | | | | | | | | | | | | stevenspiel/titleize_model_name_for_default_submit_button_value titleize the model name on default submit buttons
| * | | | downcase default submit button value's model nameSteven Spiel2016-01-013-3/+43
| | | | |
* | | | | Merge pull request #22890 from DNNX/times-mapSantiago Pastorino2016-01-031-1/+1
|\ \ \ \ \ | | | | | | | | | | | | Replace x.times.map{} with Array.new(x){} in AD::Journey::Path::Pattern
| * | | | | Replace x.times.map{} with Array.new(x){}Viktar Basharymau2016-01-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The former is slightly more readable, performant and has fewer method calls. ```ruby Benchmark.ips do |x| x.report('times.map') { 5.times.map{} } x.report('Array.new') { Array.new(5){} } x.compare! end __END__ Calculating ------------------------------------- times.map 21.188k i/100ms Array.new 30.449k i/100ms ------------------------------------------------- times.map 311.613k (± 3.5%) i/s - 1.568M Array.new 590.374k (± 1.2%) i/s - 2.954M Comparison: Array.new: 590373.6 i/s times.map: 311612.8 i/s - 1.89x slower ```