【问题标题】:Error: EPERM, operation not permitted with Node.js and Etherpad Lite错误:EPERM,Node.js 和 Etherpad Lite 不允许操作
【发布时间】:2012-09-24 23:18:17
【问题描述】:

在将Etherpad Lite 站点上传到 Azure for Web 站点之前,我正在尝试在我的计算机上启动并运行 IIS,但是当我尝试 (http://pastebin.com/4rZWbqix) 时出现此错误:

iisnode 在处理请求时遇到错误。结果:0x2 HTTP 状态:500 HTTP 原因:内部服务器错误

您收到此 HTTP 200 响应是因为 system.webServer/iisnode/@devErrorsEnabled 配置设置为 '真实'。

除了node.exe进程的stdout和stderr的日志, 考虑使用调试和 ETW 跟踪来进一步诊断 问题。

node.exe进程生成的输出到stdout的最后64k 而stderr如下图所示:fs.js:520 return

      binding.lstat(pathModule._makeLong(path));
              ^ Error: EPERM, operation not permitted 'C:\Users\Matthew'
at Object.fs.lstatSync (fs.js:520:18)
at Object.realpathSync (fs.js:1047:21)
at tryFile (module.js:142:15)
at Function.Module._findPath (module.js:181:18)
at Function.Module._resolveFilename (module.js:336:25)
at Function.Module._load (module.js:280:25)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

Etherpad 的目录中没有 fs.js 文件,所以我认为是 Node.js 的某个部分有问题。我是 Node.js 的新手,因此我们将不胜感激。

编辑 1:我目前正在研究 Azure 的替代方案,并授予 C:\Users\Matthew 权限。但是有可能以某种方式修改 fs.js 以在 binding.lstat 周围放置一个 try/catch 吗?

编辑 2:在玩了一点之后(添加权限有效!),我已经让它工作了。但现在加载 127.0.0.1:81 会返回:

iisnode 在处理请求时遇到错误。结果:0x2 HTTP 状态:500 HTTP 原因:内部服务器错误

您收到此 HTTP 200 响应是因为 system.webServer/iisnode/@devErrorsEnabled 配置设置为 '真实'。

除了node.exe进程的stdout和stderr的日志, 考虑使用调试和 ETW 跟踪来进一步诊断 问题。

node.exe进程生成的输出到stdout的最后64k stderr 如下图所示:

[x1B][33m[2012-10-03 20:28:13.587] [警告] 控制台 - [x1B][39m找不到设置文件。继续使用默认值!

[x1B][32m[2012-10-03 20:28:14.338] [INFO] 控制台 - [x1B][39mInstalled 插件:

这似乎不是错误,因为输出的是预期的,但它似乎停止在 plugins.formatPlugins()。

【问题讨论】:

  • 你最终做了什么来解决这个问题?我的文件在C:\Users\langdonx\Documents\WebStorm Projects\x,但错误显示'C:\Users\langdonx'。我不想授予 IIS_IUSRS 访问我的整个用户目录的权限。我错过了什么?
  • 不幸的是,我从未找到解决方法:\

标签: node.js azure etherpad iisnode


【解决方案1】:

确保与运行您的 node.js 应用程序的 IIS 应用程序池关联的用户身份对您部署应用程序的位置具有适当的文件系统权限(在本例中类似于 c:\users\matthew)。

如果您在默认应用程序池中运行您的应用程序并使用默认 IIS 用户,您应该能够授予必要的权限:

%systemdrive%\windows\system32\icacls.exe c:\users\matthew /grant IIS_IUSRS:(OI)(CI)F

【讨论】:

  • 我刚刚遇到了这个错误。我在C:\Users\langdonx\Documents\WebStorm Projects\x 中有我的文件,可以完全访问Everyone,但错误仍然引用operation not permitted 'C:\Users\langdonx'。我不想授予 IIS_IUSRS 访问我的整个用户目录的权限。我错过了什么?
  • 仔细检查“不允许操作”后注明的文件夹。我在一个嵌套良好的文件夹中有一个网站,它有自己的本地 node_modules 并收到此错误,结果发现节点递归到文件夹树中查找 node_modules 文件夹,它一直到 c:\users\bob\ node_modules,这就是我在授予访问权限时遇到严重麻烦的地方。出于开发目的,我只是将应用程序池标识设置为“LocalService”并且有效。向文件夹 c:\users\bob 授予应用程序池权限不起作用。
【解决方案2】:

这是关于文件夹“C:\Users\Matthew”的权限。取得所有权并授予修改权限。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,当我尝试使用最新的节点版本时 nvm use [some node version 10.12.0 in my case] 它输出它成功但是当我运行 node -v 它向我显示实际上我在一个 8 节点上。

    我通过以第二个 Windows 用户身份登录解决了这个问题(尽管他们都是管理员和节点都安装在 C:/ 上),在那里我使用 nvm use 10.12.0 替换节点版本,当我用当前用户重新登录时它工作。

    【讨论】:

      【解决方案4】:

      案例

      错误:EPERM,不允许操作 'C:\Users\Matthew'

      出现此错误是因为用户 IIS_IUSRS 无权访问此文件夹 C:\Users\Matthew

      分辨率

      您可以将您的应用程序放在“公共文件夹”上,例如:“C:\Test\[yourapplication]”并授予用户 IIS_IUSRS 访问权限 仅限此文件夹。

      【讨论】:

        【解决方案5】:

        我不推荐使用 Azure 来托管 Etherpad Lite,我们不会针对 Microsoft 的服务进行优化,这包括 Microsoft Windows。如果可以选择,请使用 linux 托管您的节点实例,根据我的经验,您会更开心。

        【讨论】:

        • 您会推荐哪个 node.js 主机?我遇到的其他大多数都不能很好地与 Windows 配合使用,这就是我选择 Azure 的原因。
        • 在文档中,安装部分从Windows开始。 github.com/ether/etherpad-lite大声笑
        猜你喜欢
        • 1970-01-01
        • 2021-01-14
        • 2021-11-18
        • 2017-04-28
        • 2022-10-18
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        • 2019-01-31
        相关资源
        最近更新 更多