【问题标题】:Why `bundle exec rake test` hang in Ubuntu 19.10 (PopOS)?为什么 `bundle exec rake test` 在 Ubuntu 19.10 (PopOS) 中挂起?
【发布时间】:2020-04-07 02:08:44
【问题描述】:

我加入了一个开发团队,我有一个项目在 ruby​​ (2.6.5) on rails (6) 上,我们正在向其中添加测试以增加 simplecov 的覆盖率。问题是从 Mac CatalinaOS 环境转移到 Ubuntu。

我们使用 asdf 版本管理器我们在本地安装了所有依赖项,数据库也安装了,redis 和 sidekiq 相同。项目可以执行;但是,当想要使用 bundle exec rake test 运行测试时,Ubuntu 在运行一些测试后会卡住。

我们通过卸载 ruby​​、node 和 yarn 版本进行了测试。重新安装所有内容,甚至重新安装 PopOS 19.10,问题仍然存在。有谁知道为什么 ruby​​ 在这些条件下会在 Ubuntu 中挂起??

我在 CTRL+C 之后添加堆栈跟踪,进程挂起超过 20 分钟。

/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/railtie.rb:28:in `block (4 levels) in <class:Railtie>'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/execution_wrapper.rb:87:in `wrap'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/reloader.rb:73:in `block in wrap'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/execution_wrapper.rb:87:in `wrap'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/reloader.rb:72:in `wrap'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/railtie.rb:27:in `block (3 levels) in <class:Railtie>'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:118:in `instance_exec'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:136:in `run_callbacks'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/execution.rb:22:in `execute'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/queue_adapters/test_adapter.rb:50:in `enqueue_or_perform'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/queue_adapters/test_adapter.rb:32:in `enqueue'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/enqueuing.rb:53:in `block in enqueue'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:109:in `block in run_callbacks'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/logging.rb:17:in `block (3 levels) in <module:Logging>'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/logging.rb:46:in `block in tag_logger'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/tagged_logging.rb:71:in `block in tagged'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/tagged_logging.rb:28:in `tagged'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/tagged_logging.rb:71:in `tagged'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/logging.rb:46:in `tag_logger'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/logging.rb:16:in `block (2 levels) in <module:Logging>'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:118:in `instance_exec'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.4.1/lib/active_support/callbacks.rb:136:in `run_callbacks'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/enqueuing.rb:49:in `enqueue'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/enqueuing.rb:20:in `perform_later'
/home/alejandro/EXTRA/REPOS/cartera/test/jobs/expire_installments_job_test.rb:42:in `block in test_it_updates_credit_installments_state_to_more_than_one_expired'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-5.2.4.1/lib/active_job/test_helper.rb:382:in `perform_enqueued_jobs'
/home/alejandro/EXTRA/REPOS/cartera/test/jobs/expire_installments_job_test.rb:41:in `test_it_updates_credit_installments_state_to_more_than_one_expired'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:98:in `block (3 levels) in run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:195:in `capture_exceptions'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:95:in `block (2 levels) in run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:270:in `time_it'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:94:in `block in run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:365:in `on_signal'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:211:in `with_info_handler'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb:93:in `run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:1026:in `run_one_method'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:339:in `run_one_method'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:326:in `block (2 levels) in run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:325:in `each'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:325:in `block in run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:365:in `on_signal'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:352:in `with_info_handler'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:324:in `run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/railties-5.2.4.1/lib/rails/test_unit/line_filtering.rb:10:in `run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:164:in `block in __run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:164:in `map'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:164:in `__run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:141:in `run'
/home/alejandro/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/minitest-5.14.0/lib/minitest.rb:68:in `block in autorun'

【问题讨论】:

  • 您使用的是什么测试套件?当它“卡住”时,它总是相同的规格吗?在此之前运行多长时间?你能发布你的规范助手/配置吗?您是否能够在不挂起的情况下运行特定的测试文件?您使用什么宝石进行测试?它可以是任何东西,如果没有细节,我们只能在黑暗中拍摄。
  • 我使用 minitest、capybara 和 simplecov。当它卡住时,它并不总是在同一个测试中。多长时间是可变的,有时它只运行 5 次测试,但有时运行 100 次。我不能从项目中发布任何文件,因为它是私有的并且归第三方所有。我很确定它不需要对 gem 做任何事情,因为 mac 环境使用的是相同的 gem。甚至 ubuntu 笔记本电脑的所有规格都更高,例如它有一个 ssd,而 mac 仍在使用 hdd。它与ubuntu有关。
  • 你在使用 docker 吗?您能否构建一个容器化应用程序来查看问题是否仍然存在?
  • 我已经在 Docker、Ubuntu base 和 alpine 中运行过它,但问题并没有持续存在,这就是为什么我认为是关于 Distro 的原因
  • 你检查log/test.log了吗?您是否每次都卡在特定的测试中?比如在调用外部API的测试中,你正在使用的PC的IP发生变化,丢包?

标签: ruby-on-rails ruby ubuntu testing


【解决方案1】:

作为一种解决方法,您可以手动将dns_timeout 设置为任何数字数组。默认应该是[5, 10, 15, 20]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2012-04-08
    • 2011-09-29
    • 2015-05-25
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多