首页 > 解决方案 > 在 Rails 初始化程序中使用创建自动加载类的实例时,Sorbet 失败

问题描述

在使用 sorbet 的 rails 应用程序中,当您有一个需要类型实例的方法时,比如说Foo. 并且您需要Foo在请求之间持续存在于内存中的应用程序的初始化程序中初始化一个实例。Foo然后您对源代码或使用的任何文件进行任何更改Foo。然后 sorbet 认为该实例不再是 的实例Foo,您需要重新启动您的应用程序才能使其停止出错。

这似乎是一种罕见的情况,但在我们的应用程序中,我们使用了一些依赖注入,而且这是一个庞大的团队。因此,几乎每次我们进行 git 更新时,sorbet 都会让我们重新启动我们的应用程序,并且在我们编写代码的一天中很多次。我们有一个大型应用程序需要一段时间才能重新启动,不得不这样做非常令人沮丧。

有想法该怎么解决这个吗?如果有帮助,我可以制作一个示例 rails 应用程序来演示此行为。

标签: sorbet

解决方案


当我在 Rails 初始化程序中引用模型时,我自己也遇到了类似的问题。我被告知有两种解决方案:

  1. 重构代码,这样你就没有这个问题
  2. 添加checked(:tests)或添加checked(:never)到有此问题的方法的标志。这将保留运行时和测试时间检查,但消除开发中的错误。有关文档,请参阅下面的链接

https://sorbet.org/docs/runtime#checked-whether-to-check-in-the-first-place


推荐阅读