首页 > 解决方案 > 堆栈级别太深 (SystemStackError) 动作包

问题描述

我正在使用 ruby​​ on rails 开发一个 Web 应用程序,但出现错误。

在 RAILS ADMIN 控制台中导航多次后,错误随机出现:

RailsAdmin::MainController#dashboard 中的 SystemStackError

我不知道该用什么方法来解决问题。

耙路线

Controller#Action
         new_user_session GET    /users/sign_in(.:format)                                                                 devise/sessions#new
             user_session POST   /users/sign_in(.:format)                                                                 devise/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)                                                                devise/sessions#destroy
        new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
       edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
            user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
                          PUT    /users/password(.:format)                                                                devise/passwords#update
                          POST   /users/password(.:format)                                                                devise/passwords#create
 cancel_user_registration GET    /users/cancel(.:format)                                                                  devise/registrations#cancel
    new_user_registration GET    /users/sign_up(.:format)                                                                 devise/registrations#new
   edit_user_registration GET    /users/edit(.:format)                                                                    devise/registrations#edit
        user_registration PATCH  /users(.:format)                                                                         devise/registrations#update
                          PUT    /users(.:format)                                                                         devise/registrations#update
                          DELETE /users(.:format)                                                                         devise/registrations#destroy
                          POST   /users(.:format)                                                                         devise/registrations#create
              rails_admin        /admin                                                                                   RailsAdmin::Engine
                     root GET    /                                                                                        home#index
                  contact GET    /contact(.:format)                                                                       home#contact
                   propos GET    /propos(.:format)                                                                        home#propos
                 settings GET    /settings(.:format)                                                                      settings#index
                  collect GET    /collect(.:format)                                                                       collect#index
            dashboardPres GET    /dashboardPres(.:format)                                                                 dashboard#index
                          POST   /settings(.:format)                                                                      settings#index
                          POST   /dashboardPres(.:format)                                                                 dashboard#index
                          POST   /collect(.:format)                                                                       collect#index
           collect_update POST   /collect_update(.:format)                                                                collect#update
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

Routes for RailsAdmin::Engine:
  dashboard GET         /                                      rails_admin/main#dashboard
      index GET|POST    /:model_name(.:format)                 rails_admin/main#index
        new GET|POST    /:model_name/new(.:format)             rails_admin/main#new
     export GET|POST    /:model_name/export(.:format)          rails_admin/main#export
bulk_delete POST|DELETE /:model_name/bulk_delete(.:format)     rails_admin/main#bulk_delete
bulk_action POST        /:model_name/bulk_action(.:format)     rails_admin/main#bulk_action
       show GET         /:model_name/:id(.:format)             rails_admin/main#show
       edit GET|PUT     /:model_name/:id/edit(.:format)        rails_admin/main#edit
     delete GET|DELETE  /:model_name/:id/delete(.:format)      rails_admin/main#delete
show_in_app GET         /:model_name/:id/show_in_app(.:format) rails_admin/main#show_in_app

主控制器

class ApplicationController < ActionController::Base
  rescue_from DeviseLdapAuthenticatable::LdapException do |exception|
    render :text => exception, :status => 500
  end
  before_action :persist_last_visited_path, :authenticate_user!
  before_action :configure_devise_parameters, if: :devise_controller?


  rescue_from CanCan::AccessDenied do |exception|
      redirect_to root_url, :alert => exception.message
  end

  def after_sign_in_path_for(resource)
    if cookies[:last_visited_path].present?
      cookies[:last_visited_path]
     else
      root_path
     end
  end

  def configure_devise_parameters
      devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
  end


  def persist_last_visited_path
    unless Rails.configuration.ignored_paths.include?(request.path) || request.xhr?   
      cookies[:last_visited_path] = request.path
    end
  end

end

完整的跟踪:

actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:689:in `block (2 levels) in define_generate_prefix'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:813:in `url_for'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:273:in `call'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:214:in `call'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:331:in `block (2 levels) in define_url_helper'
rails_admin (1.4.2) app/views/rails_admin/main/dashboard.html.haml:12:in `block in __usr_local_bundle_gems_rails_admin_______app_views_rails_admin_main_dashboard_html_haml___4103999051765141740_69997247796300'
rails_admin (1.4.2) app/views/rails_admin/main/dashboard.html.haml:10:in `each'
rails_admin (1.4.2) app/views/rails_admin/main/dashboard.html.haml:10:in `__usr_local_bundle_gems_rails_admin_______app_views_rails_admin_main_dashboard_html_haml___4103999051765141740_69997247796300'
actionview (5.2.2) lib/action_view/template.rb:159:in `block in render'
activesupport (5.2.2) lib/active_support/notifications.rb:170:in `instrument'
actionview (5.2.2) lib/action_view/template.rb:354:in `instrument_render_template'
actionview (5.2.2) lib/action_view/template.rb:157:in `render'
actionview (5.2.2) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
actionview (5.2.2) lib/action_view/renderer/abstract_renderer.rb:44:in `block in instrument'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.2) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `instrument'
actionview (5.2.2) lib/action_view/renderer/abstract_renderer.rb:43:in `instrument'
actionview (5.2.2) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
actionview (5.2.2) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
actionview (5.2.2) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
actionview (5.2.2) lib/action_view/renderer/template_renderer.rb:16:in `render'
actionview (5.2.2) lib/action_view/renderer/renderer.rb:44:in `render_template'
actionview (5.2.2) lib/action_view/renderer/renderer.rb:25:in `render'
actionview (5.2.2) lib/action_view/rendering.rb:103:in `_render_template'
actionpack (5.2.2) lib/action_controller/metal/streaming.rb:219:in `_render_template'
actionview (5.2.2) lib/action_view/rendering.rb:84:in `render_to_body'
actionpack (5.2.2) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
actionpack (5.2.2) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack (5.2.2) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (5.2.2) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:46:in `block (2 levels) in render'
activesupport (5.2.2) lib/active_support/core_ext/benchmark.rb:14:in `block in ms'
/usr/local/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
activesupport (5.2.2) lib/active_support/core_ext/benchmark.rb:14:in `ms'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:46:in `block in render'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (5.2.2) lib/active_record/railties/controller_runtime.rb:31:in `cleanup_view_runtime'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:45:in `render'
/usr/local/bundle/bundler/gems/remotipart-999f98133c6f/lib/remotipart/render_overrides.rb:17:in `render_with_remotipart'
rails_admin (1.4.2) lib/rails_admin/config/actions/dashboard.rb:37:in `block (2 levels) in <class:Dashboard>'
rails_admin (1.4.2) app/controllers/rails_admin/main_controller.rb:22:in `instance_eval'
rails_admin (1.4.2) app/controllers/rails_admin/main_controller.rb:22:in `dashboard'
actionpack (5.2.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (5.2.2) lib/abstract_controller/base.rb:194:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.2.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (5.2.2) lib/active_support/callbacks.rb:132:in `run_callbacks'
actionpack (5.2.2) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.2) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `instrument'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
activerecord (5.2.2) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
actionpack (5.2.2) lib/abstract_controller/base.rb:134:in `process'
actionview (5.2.2) lib/action_view/rendering.rb:32:in `process'
actionpack (5.2.2) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (5.2.2) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:34:in `serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.2) lib/rails/engine.rb:524:in `call'
railties (5.2.2) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.2) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.2) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:840:in `call'
rack-pjax (1.1.0) lib/rack/pjax.rb:12:in `call'
/usr/local/bundle/bundler/gems/remotipart-999f98133c6f/lib/remotipart/middleware.rb:32:in `call'
warden (1.2.8) lib/warden/manager.rb:36:in `block in call'
warden (1.2.8) lib/warden/manager.rb:34:in `catch'
warden (1.2.8) lib/warden/manager.rb:34:in `call'
rack (2.0.6) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.0.6) lib/rack/etag.rb:25:in `call'
rack (2.0.6) lib/rack/conditional_get.rb:25:in `call'
rack (2.0.6) lib/rack/head.rb:12:in `call'
actionpack (5.2.2) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.0.6) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.6) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/cookies.rb:670:in `call'
activerecord (5.2.2) lib/active_record/migration.rb:559:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (5.2.2) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (5.2.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
web-console (3.7.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.7.0) lib/web_console/middleware.rb:22:in `block in call'
web-console (3.7.0) lib/web_console/middleware.rb:20:in `catch'
web-console (3.7.0) lib/web_console/middleware.rb:20:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (5.2.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (5.2.2) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:71:in `block in tagged'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:71:in `tagged'
railties (5.2.2) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.0.6) lib/rack/method_override.rb:22:in `call'
rack (2.0.6) lib/rack/runtime.rb:22:in `call'
activesupport (5.2.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/static.rb:127:in `call'
rack (2.0.6) lib/rack/sendfile.rb:111:in `call'
railties (5.2.2) lib/rails/engine.rb:524:in `call'
puma (3.12.0) lib/puma/configuration.rb:225:in `call'
puma (3.12.0) lib/puma/server.rb:658:in `handle_request'
puma (3.12.0) lib/puma/server.rb:472:in `process_client'
puma (3.12.0) lib/puma/server.rb:332:in `block in run'
puma (3.12.0) lib/puma/thread_pool.rb:133:in `block in spawn_thread' 

有人可以帮我解决这个问题吗?

谢谢

标签: ruby-on-railsrubyrubygems

解决方案


一个选项是RailsAdmin无法决定您的管理路由的前缀,因为它们之间存在重叠。rake routes您可以通过在控制台上运行来检查所有生成的路由。

您的 MainController 上有重定向吗?因为从堆栈跟踪来看,您似乎处于由 aredirect_to或没有有效管理会话引起的重定向循环中。如果您可以发布您的home#index或整个 MainController 的代码,我可以提供更好的答案。


推荐阅读