sorbet - 在 Rails 初始化程序中使用创建自动加载类的实例时,Sorbet 失败
问题描述
在使用 sorbet 的 rails 应用程序中,当您有一个需要类型实例的方法时,比如说Foo
. 并且您需要Foo
在请求之间持续存在于内存中的应用程序的初始化程序中初始化一个实例。Foo
然后您对源代码或使用的任何文件进行任何更改Foo
。然后 sorbet 认为该实例不再是 的实例Foo
,您需要重新启动您的应用程序才能使其停止出错。
这似乎是一种罕见的情况,但在我们的应用程序中,我们使用了一些依赖注入,而且这是一个庞大的团队。因此,几乎每次我们进行 git 更新时,sorbet 都会让我们重新启动我们的应用程序,并且在我们编写代码的一天中很多次。我们有一个大型应用程序需要一段时间才能重新启动,不得不这样做非常令人沮丧。
有想法该怎么解决这个吗?如果有帮助,我可以制作一个示例 rails 应用程序来演示此行为。
解决方案
当我在 Rails 初始化程序中引用模型时,我自己也遇到了类似的问题。我被告知有两种解决方案:
- 重构代码,这样你就没有这个问题
- 添加
checked(:tests)
或添加checked(:never)
到有此问题的方法的标志。这将保留运行时和测试时间检查,但消除开发中的错误。有关文档,请参阅下面的链接
https://sorbet.org/docs/runtime#checked-whether-to-check-in-the-first-place
推荐阅读
- python - Windows Python 路径
- c - 我可以为鼠标按钮设置全局 GTK 加速器吗?
- scheme - 用 OCaml 计算欧拉常数
- ruby - 使用 rspec 测试 ARGV 选项。如何期望一个方法从另一个模块调用一个方法
- json - 如何用 JQ 填充数字?
- python - 我有一个列表,如何拆分列表中的单词以获取列表中的每个字母
- pandas - Jupyter Notebook - 检索 numpy 的错误
- javascript - 如何异步导入所有 Vue3 组件?
- python - newe Raspberry 中的 Adafruit BNO0555 方向传感器出错
- python - pd.to_numeric() 返回 TypeError: 'Series' 对象是可变的,因此它们不能被散列