使用最新Ruby/Debug gem时Rails应用调试冻结问题求助
Rails应用使用Ruby/Debug gem调试时冻结问题
问题现象
- 使用
thor调试应用一切正常,但通过rails server启动调试时,Web应用请求会一直运行直至超时,即使把断点设置在无问题的首页也无法正常触发调试 - 用相同Ruby/Rails版本创建的全新Rails应用,调试功能完全正常,排除基础环境问题
临时可行方案
目前通过以下命令使用Chrome DevTools可以正常调试:
rdbg -n --open=chrome -c -- bin/rails s
但使用VS Code调试时仍存在相同冻结问题,这只是临时解决办法,并非根本方案。
问题推测
推测问题源于gem冲突,或者application.rb/development.rb中的配置异常。
应用背景
该应用为多年前创建,已持续升级至最新Ruby和Rails版本。
环境信息
- Ruby版本: 3.3.3
- Rails版本: 7.1.3.4
- Rdbg版本: 1.9.2
- 操作系统: Fedora 38
相关配置文件
Gemfile内容
source 'https://rubygems.org' ruby "3.3.3" gem 'rails', '~> 7.1' gem 'puma' group :development, :test, :staging do gem "debug", ">= 1.0.0", platforms: %i[ mri mingw x64_mingw ] end gem 'pg' gem 'strong_password', platforms: :mri gem 'cancancan', '~> 3.0' gem 'devise' gem 'simple_form' gem 'devise-encryptable' gem 'activemodel-serializers-xml' gem 'globalize', '~> 6.0' gem 'redcarpet' gem 'country_select' gem 'bootstrap-sass', '~> 3' gem 'font-awesome-rails' gem 'sass-rails', '~> 5.0' gem 'sassc-rails', '~> 2.1' gem 'coffee-rails', '~> 5' gem 'jquery-rails' gem 'turbolinks', '~> 5.2' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' gem 'redis', '~> 4.0', require: false gem 'haml-rails' gem 'kaminari' gem 'bcrypt', '~> 3.1.7' gem 'friendly_id', '~> 5.1' gem 'exception_notification' gem 'geocoder' gem 'pry-rails' gem 'listen' gem 'dalli' gem 'net-smtp' gem "sprockets-rails" gem 'psych', '~> 5.0' gem 'bootsnap', '>= 1.4.2', require: false group :development, :test, :staging do gem 'letter_opener_web', '~> 2.0' gem 'launchy' gem 'i18n-tasks', '~> 0.9' gem 'rack-mini-profiler', require: false end group :development do gem 'web-console' gem 'spring' gem 'spring-watcher-listen' # , '~> 2.0.0' end group :production, :staging do gem "sd_notify" end group :test do gem 'sqlite3', '~> 1.7' gem "rspec-rails" gem 'cucumber-rails', :require => false gem 'database_cleaner' gem 'capybara', ">= 2.15" gem 'pickle' gem 'capybara-screenshot' gem 'aruba' gem 'selenium-webdriver' gem 'webdrivers' gem 'factory_bot_rails' gem 'chronic' gem 'timecop' gem 'rails-controller-testing' gem 'stripe-ruby-mock', '~> 3.0.1', :require => 'stripe_mock' gem 'simplecov', require: false end gem 'sitemap_generator' gem 'mini_magick' gem 'carrierwave' gem 'sidekiq', '~> 6.0' gem 'record_tag_helper', '~> 1.0' gem 'browser' gem 'mini_portile2' gem 'stripe' gem 'sinatra', require: false gem 'slim' gem 'json', '>= 2.3.0' gem 'image_processing', '~> 1.2' # gem 'net-smtp'
application.rb(无注释)
require_relative "boot" require "rails/all" require_relative '../lib/middleware/ping' Bundler.require(*Rails.groups) module MyApp class Application < Rails::Application config.load_defaults 6.1 config.active_support.cache_format_version = 7.0 config.autoload_lib(ignore: %w(assets tasks)) config.eager_load_paths << Rails.root.join("lib/**") config.autoload_paths += Dir["#{config.root}/lib/**/"] config.add_autoload_paths_to_load_path = true config.time_zone = 'Europe/Paris' config.i18n.available_locales = [:fr, :en, :it, :fa] config.i18n.enforce_available_locales = true config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s] config.i18n.default_locale = :fr config.encoding = "utf-8" config.active_support.escape_html_entities_in_json = true config.active_record.timestamped_migrations = false config.active_record.schema_format = :ruby config.assets.enabled = true config.generators do |g| g.assets false g.test_framework :rpec g.fixture_replacement :factory_bot end config.assets.precompile += ['application.js', 'standard.css', ... ] config.assets.version = '1.0' config.assets.initialize_on_precompile = false config.exceptions_app = self.routes config.active_job.queue_name_delimiter = "_" config.action_mailer.deliver_later_queue_name = :mailers config.action_mailer.default charset: "utf-8" config.action_controller.per_form_csrf_tokens = true config.action_controller.forgery_protection_origin_check = true config.ssl_options = { hsts: { subdomains: true } } config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob" end end
development.rb内容
Rails.application.configure do config.annotations.register_directories('features') config.annotations.register_extensions('feature') { |tag| /#\s*(#{tag}):?\s*(.*)$/ } config.hosts += %w(example.com www.example.com) config.enable_reloading = true config.eager_load = false config.consider_all_requests_local = true config.server_timing = true if Rails.root.join("tmp/caching-dev.txt").exist? config.action_controller.perform_caching = true config.action_controller.enable_fragment_cache_logging = true config.cache_store = :file_store, 'tmp/cache' config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{2.days.to_i}" } else config.action_controller.perform_caching = false config.cache_store = :null_store end config.active_storage.service = :local config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_caching = false config.active_support.deprecation = :log config.active_support.disallowed_deprecation = :raise config.active_support.disallowed_deprecation_warnings = [] config.active_record.migration_error = :page_load config.active_record.verbose_query_logs = true config.active_job.queue_adapter = :sidekiq config.action_mailer.delivery_method = :letter_opener config.action_mailer.perform_deliveries = true config.action_mailer.default_url_options = { host: "https://tripa.com" } config.action_dispatch.best_standards_support = :builtin config.assets.compress = false config.assets.digest = false config.assets.debug = false config.assets.quiet = true config.middleware.use ExceptionNotification::Rack, email: { sender_address: 'me@site.com', exception_recipients: 'me@site.com' } config.file_watcher = ActiveSupport::EventedFileUpdateChecker config.log_level = :debug config.sass.inline_source_maps = true config.sass.line_comments = false end
我发现并非只有我遇到这个新版Ruby/Debug gem的问题。
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

