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 加载时间过长的主要内容,如果未能解决你的问题,请参考以下文章

while 循环加载时间过长

BigQuery 从 Android 加载数据的时间过长

在 IE 中引导选择加载时间过长

Firebase Storage Flutter 显示图像加载时间过长

Watcher 加载时间过长(NodeWatcher) - React Native

Android Studio 调试器启动/加载时间过长