"database is locked"错误消息在 Ruby on Rails 测试中是什么意思?



我正在学习Hartl的Rails教程并使用Rails 6。每当我运行测试时,我总是会遇到持续的错误,这些错误似乎是随机出现的——随机的,因为连续的测试有时会指示不同领域的错误。这些测试也非常非常缓慢——有时会超过30分钟。有人遇到过这种情况吗?我可能做错了什么?现在为了转移注意力:我正在使用Win 8.1:(

这些错误消息的常见之处在于,它们都包含一条"RuntimeErroer:数据库已锁定"消息。这是其中之一:

ERROR["test_email_validation_should_reject_invalid_addresses", 
#<Minitest::Reporters::Suite:0x000000000c9b29c0 @name="UserTest">, 608.7059665989946]
test_email_validation_should_reject_invalid_addresses#UserTest (608.71s)
RuntimeError: RuntimeError: database is locked

我已经和这个错误斗争了很长一段时间。事实上,它太糟糕了,阻碍了我在Hartl的Rails教程中真正前进。

编辑:找到了一个更好的答案,简单地解决了问题,而不是玩我可能不太理解的设置。

请参阅->https://stackoverflow.com/a/62730905/10463184

我唯一的贡献是,作为一名windows用户,我发现在test/test_help.rb中注释掉了整行…

parallelize(workers: :number_of_processors, with: :threads)

已解决问题。尝试在链接处建议的设置导致";UNIXServer是必需的(LoadError(";错误

这里有一个解决我的一个挑战的方案,那就是测试速度太慢。在config/database.yml中,我添加了以下行(到test.sqlite部分(:

database: db/test.sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 3000

测试持续时间从几分钟降到了几秒钟。胜利

遗憾的是,"RuntimeError:数据库已锁定"的消息仍然存在。

我发现自己也处于同样的情况。

在我的案例中,发生这个错误是因为测试默认在MiniTest上并行运行,这意味着它们也在rails中并行运行。当这种情况发生时,并且有测试在测试数据库上进行事务,数据库会锁定自己,从而导致错误。

对我有效的解决方案是设置属性";use_transactional_tests"在测试类中设置为false。

您可以在文档中看到正确的用法和示例。

如果其他人犯了我犯的明显错误,在您的实时站点或测试中尝试删除之前,请确保退出终端中的任何rails控制台会话。

相关内容

  • 没有找到相关文章