Project

General

Profile

Actions

Bug #20227

closed

Unexpected "<internal:array>" appears since c84237f9531aed3b204d3fdacc2dd9d2bd4c7d81

Added by yahonda (Yasuo Honda) 11 months ago. Updated 11 months ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.4.0dev (2024-01-23T20:09:57Z master c84237f953) [x86_64-linux]
[ruby-core:116503]

Description

Unexpected "internal:array" appears since c84237f9531aed3b204d3fdacc2dd9d2bd4c7d81

Rails CI against Ruby master branch gets failed
https://buildkite.com/rails/rails-nightly/builds/85#018d3dec-4a38-41cb-9ebf-1cbc78a697ba/1147-1156

Failure:
ActionDispatch::Routing::RoutesInspectorTest#test_routes_when_expanded [test/dispatch/routing/inspector_test.rb:365]:
--- expected
+++ actual
@@ -1 +1 @@
-["--[ Route 1 ]----------", "Prefix            | custom_assets", "Verb              | GET", "URI               | /custom/assets(.:format)", "Controller#Action | custom_assets#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:333", "--[ Route 2 ]----------", "Prefix            | custom_furnitures", "Verb              | GET", "URI               | /custom/furnitures(.:format)", "Controller#Action | custom_furnitures#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:334", "--[ Route 3 ]----------", "Prefix            | blog", "Verb              | ", "URI               | /blog", "Controller#Action | Blog::Engine", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:335", "", "[ Routes for Blog::Engine ]", "--[ Route 1 ]----------", "Prefix            | cart", "Verb              | GET", "URI               | /cart(.:format)", "Controller#Action | cart#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:329"]
+["--[ Route 1 ]----------", "Prefix            | custom_assets", "Verb              | GET", "URI               | /custom/assets(.:format)", "Controller#Action | custom_assets#show", "Source Location   | <internal:array>:52", "--[ Route 2 ]----------", "Prefix            | custom_furnitures", "Verb              | GET", "URI               | /custom/furnitures(.:format)", "Controller#Action | custom_furnitures#show", "Source Location   | <internal:array>:52", "--[ Route 3 ]----------", "Prefix            | blog", "Verb              | ", "URI               | /blog", "Controller#Action | Blog::Engine", "Source Location   | <internal:array>:52", "", "[ Routes for Blog::Engine ]", "--[ Route 1 ]----------", "Prefix            | cart", "Verb              | GET", "URI               | /cart(.:format)", "Controller#Action | cart#show", "Source Location   | <internal:array>:52"]

This diff is longer, the difference is that the "Source Location" shows <internal:array> while the path to the route file like /rails/actionpack/test/dispatch/routing/inspector_test.rb expected. FYI, "Source Location" feature has been added to Rails via https://github.com/rails/rails/commit/a00e548da7a

I can reproduce this failure locally as follows.

  • Steps to reproduce
git clone https://github.com/rails/rails
cd rails
rm Gemfile.lock
bundle install
cd actionpack
bin/test test/dispatch/routing/inspector_test.rb -n test_routes_when_expanded
  • Actual result
$ bin/test test/dispatch/routing/inspector_test.rb -n test_routes_when_expanded
... snip ...
Run options: -n test_routes_when_expanded --seed 20764

# Running:

F

Failure:
ActionDispatch::Routing::RoutesInspectorTest#test_routes_when_expanded [test/dispatch/routing/inspector_test.rb:365]:
--- expected
+++ actual
@@ -1 +1 @@
-["--[ Route 1 ]----------", "Prefix            | custom_assets", "Verb              | GET", "URI               | /custom/assets(.:format)", "Controller#Action | custom_assets#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:333", "--[ Route 2 ]----------", "Prefix            | custom_furnitures", "Verb              | GET", "URI               | /custom/furnitures(.:format)", "Controller#Action | custom_furnitures#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:334", "--[ Route 3 ]----------", "Prefix            | blog", "Verb              | ", "URI               | /blog", "Controller#Action | Blog::Engine", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:335", "", "[ Routes for Blog::Engine ]", "--[ Route 1 ]----------", "Prefix            | cart", "Verb              | GET", "URI               | /cart(.:format)", "Controller#Action | cart#show", "Source Location   | /home/yahonda/src/github.com/rails/rails/actionpack/test/dispatch/routing/inspector_test.rb:329"]
+["--[ Route 1 ]----------", "Prefix            | custom_assets", "Verb              | GET", "URI               | /custom/assets(.:format)", "Controller#Action | custom_assets#show", "Source Location   | <internal:array>:52", "--[ Route 2 ]----------", "Prefix            | custom_furnitures", "Verb              | GET", "URI               | /custom/furnitures(.:format)", "Controller#Action | custom_furnitures#show", "Source Location   | <internal:array>:52", "--[ Route 3 ]----------", "Prefix            | blog", "Verb              | ", "URI               | /blog", "Controller#Action | Blog::Engine", "Source Location   | <internal:array>:52", "", "[ Routes for Blog::Engine ]", "--[ Route 1 ]----------", "Prefix            | cart", "Verb              | GET", "URI               | /cart(.:format)", "Controller#Action | cart#show", "Source Location   | <internal:array>:52"]



bin/test test/dispatch/routing/inspector_test.rb:319



Finished in 0.051798s, 19.3056 runs/s, 19.3056 assertions/s.
1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
$

Updated by byroot (Jean Boussier) 11 months ago

  • Status changed from Open to Closed

@yahonda (Yasuo Honda) this isn't a regression, it happens when methods are migrated from pure C to the new Primitive system. It's Rails that should be fixed.

Updated by k0kubun (Takashi Kokubun) 11 months ago

As Jean said, this is intentional. It's not new in Ruby 3.4 that we're changing backtraces by Ruby rewrite (Ruby 3.0: Kernel#tap and Kernel#then, Ruby 3.3: Kernel#loop and Integer#times), but I guess Array#each is more commonly used than those precedents. I added a NEWS entry about [Feature #20182] at 1891b4b6c3d40bd7dca085915f5d28ba97ebd156 to make the change easier to discover.

Updated by byroot (Jean Boussier) 11 months ago

For the record I fixed it in Rails with https://github.com/rails/rails/pull/50923.

Updated by Eregon (Benoit Daloze) 11 months ago

FWIW I'm keeping https://gist.github.com/eregon/912e6359e83781c5fa1c638d3768c526 to show that more methods are being implemented in Ruby (it's great).
And indeed that means gems sometimes need to handle backtrace entries starting with <internal: more explicitly as before it would just be the caller's location being repeated (when the method is defined in C).

Actions

Also available in: Atom PDF

Like0
Like1Like0Like0Like0