【发布时间】:2023-03-16 09:03:01
【问题描述】:
我有一个运行 6.1.1 版的 Rails 应用程序,目前我们使用 Ruby 2.7.2
在尝试升级到 Ruby 3 时,我遇到了一个有趣的问题:一些代码显然阻塞了主线程。当我尝试启动服务器或运行测试时,控制台卡住了,我什至无法停止进程,我必须kill它。
我找到了一个名为 valvat 的 gem,用于验证欧盟增值税号。我在其 Github 存储库上打开了一个问题,但维护者即使使用我拥有的相同 Gemfile.lock 也无法重现,这让我相信它可能不仅仅是 gem,必须是我代码中的其他内容。
这是我尝试启动服务器时发生的情况:
=> Booting Puma
=> Rails 6.1.1 application starting in development
=> Run `bin/rails server --help` for more startup options
^C^C^C
正如人们所看到的,我什至无法阻止它,线程现在挂了,我无法确切地知道是谁。
我尝试使用 -b -w 运行规范以查看我能看到的内容,但得到了相同的错误:线程挂起,我从 Ruby 收到的警告只是通用的,例如 method already defined 或类似的东西。
这是在线程挂起之前使用-b -w 运行规范时控制台的最后输出:
/Users/luiz/rails_dev/app/config/initializers/logging_rails.rb:18: warning: method redefined; discarding old tag_logger
/Users/luiz/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/activejob-6.1.1/lib/active_job/logging.rb:19: warning: previous definition of tag_logger was here
问题是,当我删除 gem 并运行此命令时,我也会收到这些警告,尽管那时规范运行没有问题。
有没有办法追踪到导致线程挂起的原因?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-6