hook orm 加载时间过长
Posted
技术标签:
【中文标题】hook orm 加载时间过长【英文标题】:the hook orm taking too long to load 【发布时间】:2015-04-15 23:45:30 【问题描述】:我正在使用两个带有sails 的数据库适配器。
一个用于mondoDB,第二个用于mysql。每当我运行命令“sails lift”时。一旦它给出错误
error: Error: The hook `orm` is taking too long to load.
Make sure it is triggering its `initialize()` callback, or else set `sails.config.orm._hookTimeout to a higher value (currently 20000)
at tooLong [as _onTimeout] (C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private\loadHooks.js:92:21)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15
当我在没有更改的情况下重新运行风帆时,它不会给出任何错误。我怎样才能每次都避免这个错误。这是我第一次使用sailsjs 的经验,所以任何帮助都将不胜感激......
【问题讨论】:
风帆什么版本,有多少型号?贴一些代码。信息不足。 sails 版本是 0.11.0。我已经发布了控制台的输出。还需要什么? 你有多少型号? 我正在使用两个 db adpterz 一个用于 mysql,它有 5 个模型,一个用于 mongoDB,其中包含两个模型 chat 和 user。实际上我将我的项目从 node 转移到了sails.so 为什么有时为 mongodb 使用 orm制造问题。 最简单的解决方法是在config/
下添加一个名为 hookTimeout.js 的文件,该文件导出hookTimeout: value
,其中value
是毫秒数
【参考方案1】:
您也可以尝试将defaults: timeout: 30000
添加到您的钩子中
参考:https://sailsjs.com/documentation/concepts/extending-sails/hooks/hook-specification/defaults
【讨论】:
【参考方案2】:在运行sails lift 时,在命令行中运行此命令 帆吊钩超时=75000
【讨论】:
【参考方案3】:转到 models.js 文件并取消注释 migrate: 'alter'
【讨论】:
【参考方案4】:我意识到这是一个很老的问题,但我也遇到了同样的问题。我确信这不是我的关系。
我的解决方案是更改模型的迁移选项,您可以选择 3 个
安全 - 从不自动迁移我的数据库。我会自己做(手工) alter - 自动迁移,但尝试保留我现有的数据(实验性) drop - 每次升起 Sails 时都会擦除/删除我的所有数据并重建模型
进入 config/models.js 并放在那里:
migrate: 'safe'
或您想使用的上述任何选项。
【讨论】:
只是一个“我也是!” - 我不断收到超时,但我将迁移更改为安全,并且 20 秒的标准超时有效【参考方案5】:有两种方式,我们大概可以称之为:
1- 系统范围的方法:(正如@arcseldon 所说)
尝试将 hookTimeout 键添加到项目的 config/env/development.js 或 config/env/production.js 文件中。接下来几乎所有的钩子(除了一些钩子,例如moduleloader)都会检索超时值并自己考虑。
2- Hook 具体方法:(正如@davepreston 所说)
在项目的配置文件夹中创建一个 [module-name].js 文件,并为其添加 _hookTimeout 键。因此,它将导致仅将超时值分配给该特定模块。 (注意sails配置文件的特定json结构。)
【讨论】:
【参考方案6】:最好在每个环境的基础上执行此操作。在 config 目录下,您将拥有类似以下内容:
然后在每个的module.exports里面输入:
module.exports =
hookTimeout: 40000
注意,属性名前也不需要下划线。
【讨论】:
我正在这样做,但仍然得到同样的错误。会不会是时间本身?还是应该将 hookTimeout 放在 orm 对象中?【参考方案7】:昨晚我遇到了这个问题,因为我的笔记本电脑和数据库服务器之间的互联网连接速度很慢。我的解决方案是在 config 目录中创建一个名为 orm.js 的新文件(名称并不重要)。
然后添加以下代码:
// config/orm.js
module.exports.orm =
_hookTimeout: 60000 // I used 60 seconds as my new timeout
;
我还发现我必须更改我的 pubsub 超时,但这对你来说可能没有必要。
// config/pubsub.js
module.exports.pubsub =
_hookTimeout: 60000 // I used 60 seconds as my new timeout
;
注意:另一个答案建议更改 node_modules
文件夹中的sails文件。这几乎总是一个坏主意,因为任何npm update
都可能恢复您的更改。
【讨论】:
这对我来说非常有效。就我而言,我在树莓派模型 B 上运行风帆,所以我不得不将 orm 和 pubsub 挂钩超时设置为 120000 毫秒,因为它仍然会在 60000 毫秒时出现错误 我必须为本地 mysql 数据库添加 config/pubsub.js 事件。我需要它,因为我设置了 migrage: 'alter' 以在一个表中添加一列。【参考方案8】:转到node_modules
文件夹并浏览到\sails\lib\app\private
在你的情况下,你应该去这个文件夹:
C:\Users\KAMI\AppData\Roaming\npm\node_modules\sails\lib\app\private
然后打开名为loadHooks.js
的文件并转到显示以下内容的行:
var timeoutInterval = (sails.config[hooks[id].configKey || id] && sails.config[hooks[id].configKey || id]._hookTimeout) || sails.config.hookTimeout || 20000;
将此行中的最后一个值从20000
更改为更高的值并保存文件,然后像往常一样通过“sails lift”运行您的应用程序
注意:您可能需要尝试一些更高的值,而不是 20000
,直到达到适合您的值。当我将值更改为50000
时,我的申请成功解除了
【讨论】:
有时当应用程序启动时,ORM 挂钩(您的数据库适配器/插件)需要更多时间来加载。但是,当钩子配置不包含定义的加载超时时,Sails 将默认超时设置为 20 秒(就像我们这里的情况一样)。所以我们所做的只是增加了sails设置的默认超时限制。 @尼娅 我总是避免更改node_modules
文件夹中的任何内容,因为这些是您的依赖项,而不是您的代码。 @HeshamUsama 对这个问题是正确的,但是(在我看来)更改超时的更好地方是在您的应用程序的配置中。我添加了一个答案,详细说明了我如何为我的应用解决问题。以上是关于hook orm 加载时间过长的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Storage Flutter 显示图像加载时间过长