Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Pagy::OverflowError (MAYBE-MARKETING-3D) #255

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

revise-dev[bot]
Copy link
Contributor

@revise-dev revise-dev bot commented Feb 14, 2025

The error Pagy::OverflowError: expected :page in 1..362; got 363 occurs when a user tries to access a page number that exceeds the total number of available pages. This is a common scenario in pagination, especially when:

  1. Users manually modify the page parameter in the URL
  2. The total number of items changes while users are paginating through results
  3. Bookmarked links point to pages that no longer exist

The original code had the overflow handling commented out, causing Pagy to raise an exception when encountering these situations. This creates a poor user experience and generates unnecessary error logs.

To fix this, we're making two critical changes to the Pagy configuration:

  1. Enabling the overflow extra by uncommenting require 'pagy/extras/overflow' - this loads the necessary code to handle overflow situations gracefully
  2. Setting Pagy::DEFAULT[:overflow] = :empty_page - this configures Pagy to return an empty result set when accessing a page beyond the available range, rather than throwing an error

The :empty_page strategy is chosen because it's the most user-friendly approach:

  • It doesn't redirect users (which can be confusing)
  • It maintains the requested URL (preserving browser history)
  • It allows the application to display a meaningful "no results" message
  • It's consistent with how many popular web applications handle pagination overflow

This change maintains the original functionality while making it more robust and user-friendly.

Error Details

Summary:

Pagy::OverflowError: expected :page in 1..362; got 363 (Pagy::OverflowError)

    raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Stacktrace:

pagy.rb:63
pagy.rb:37
pagy/backend.rb:16
pagy/backend.rb:16
app/controllers/stocks_controller.rb:148
action_controller/metal/basic_implicit_render.rb:8
abstract_controller/base.rb:226
action_controller/metal/rendering.rb:193
abstract_controller/callbacks.rb:261
active_support/callbacks.rb:120
turbo-rails.rb:24
/home/deploy/maybe-marketing-prod/shared/bundle/ruby/3.4.0/gems/turbo-rails-2.0.11/app/controllers/concerns/turbo/request_id_tracking.rb:10
active_support/callbacks.rb:129
action_text/rendering.rb:25
action_text/engine.rb:71
active_support/callbacks.rb:129
active_support/callbacks.rb:129
sentry/rails/controller_transaction.rb:21
sentry/hub.rb:115
sentry/span.rb:237
sentry/hub.rb:113
sentry-ruby.rb:507
sentry/rails/controller_transaction.rb:18
active_support/callbacks.rb:129
active_support/callbacks.rb:140
abstract_controller/callbacks.rb:260
action_controller/metal/rescue.rb:27
action_controller/metal/instrumentation.rb:76
active_support/notifications.rb:210
active_support/notifications/instrumenter.rb:58
sentry/rails/tracing.rb:56
active_support/notifications.rb:210
action_controller/metal/instrumentation.rb:75
action_controller/metal/params_wrapper.rb:259
active_record/railties/controller_runtime.rb:39
abstract_controller/base.rb:163
action_view/rendering.rb:40
action_controller/metal.rb:252
action_controller/metal.rb:335
action_dispatch/routing/route_set.rb:67
action_dispatch/routing/route_set.rb:50
action_dispatch/journey/router.rb:53
action_dispatch/journey/router.rb:133
action_dispatch/journey/router.rb:126
action_dispatch/journey/router.rb:126
action_dispatch/journey/router.rb:34
action_dispatch/routing/route_set.rb:908
logtail-rails/error_event.rb:24
logtail-rack/http_events.rb:213
logtail-rack/user_context.rb:74
logtail-rails/session_context.rb:16
logtail-rack/http_context.rb:23
logtail/current_context.rb:120
logtail/current_context.rb:44
logtail-rack/http_context.rb:22
rack/static.rb:161
rack/tempfile_reaper.rb:20
rack/etag.rb:29
rack/conditional_get.rb:31
rack/head.rb:15
action_dispatch/http/permissions_policy.rb:38
action_dispatch/http/content_security_policy.rb:38
rack/session/abstract/id.rb:274
rack/session/abstract/id.rb:268
action_dispatch/middleware/cookies.rb:706
action_dispatch/middleware/callbacks.rb:31
active_support/callbacks.rb:100
action_dispatch/middleware/callbacks.rb:30
sentry/rails/rescued_exception_interceptor.rb:14
action_dispatch/middleware/debug_exceptions.rb:31
sentry/rack/capture_exceptions.rb:30
sentry/hub.rb:269
sentry-ruby.rb:420
sentry/rack/capture_exceptions.rb:21
sentry/hub.rb:59
sentry-ruby.rb:400
sentry/rack/capture_exceptions.rb:20
action_dispatch/middleware/show_exceptions.rb:32
rails/rack/logger.rb:41
rails/rack/logger.rb:29
action_dispatch/middleware/remote_ip.rb:96
action_dispatch/middleware/request_id.rb:34
rack/method_override.rb:28
rack/runtime.rb:24
active_support/cache/strategy/local_cache_middleware.rb:29
action_dispatch/middleware/executor.rb:16
action_dispatch/middleware/static.rb:27
rack/sendfile.rb:114
action_dispatch/middleware/ssl.rb:92
rails/engine.rb:535
puma/configuration.rb:279
puma/request.rb:99
puma/thread_pool.rb:390
puma/request.rb:98
puma/server.rb:472
puma/server.rb:254
puma/thread_pool.rb:167

Tip

You can make revisions or ask questions of Revise.dev by using /revise in any comment or review!

  • /revise Add a comment above the method to explain why we're making this change.
  • /revise Why did you choose to make this change specifically?

Important

If something doesn’t look right, click to retry this interaction.

Quick links: View in SentryView in Revise

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants