【问题标题】:Restify on Cloudfoundry 'invalid ELF header'在 Cloudfoundry 上恢复“无效的 ELF 标头”
【发布时间】:2012-09-17 12:19:18
【问题描述】:

我正在将 node.js 应用程序部署到 Cloudfoundry,唯一的模块依赖项是 restify。我试过用我的本地 node_modules 目录推送它,并在 cloudfoundry.json 中使用 npm shrinkwrap 和 'ignoreModules' 但总是在 stdout.log 中得到这个:

{ stack: [Getter/Setter],
  arguments: undefined,
  type: undefined,
  message: '/var/vcap/data/dea/apps/myapp-0-6f9cf62f9bbe58f5d2eb13a94acb5d3a/app/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node: invalid ELF header' }

有什么想法吗?在此先感谢:)

编辑:对不起,我的意思是'忽略*节点*模块'

【问题讨论】:

    标签: node.js cloud-foundry restify


    【解决方案1】:

    我在设置开发 Docker 环境时遇到了类似的问题。我想将我的源文件挂载到 docker 映像上,但是为 docker 映像编译了一个 node_modules 目录。当我在 docker 映像上创建一个新目录时,npm install 在该目录中,然后对我的一些源代码使用软链接,我看到了相同的行为。

    解决方案:不要使用软链接。

    【讨论】:

      【解决方案2】:

      我的猜测是该模块是为您的本地架构(例如 x86)编译的,而尝试运行它的服务器是不同的架构(例如 64 位)。节点模块中可以包含 npm 将处理构建的 C++ 扩展,您不一定只是将 node_modules 文件夹中的二进制文件从一个平台移动到另一个平台,您需要重新编译它们。

      不过,我对 Cloudfoundry 的了解还不够,无法告诉您如何做到这一点,希望其他人有更好的答案。

      【讨论】:

      • 当我看到“无效的 ELF 标头”时,这是我的第一个想法,但后来我使用 npm shrinkwrap 和 ignoreModules 来避免上传我的本地二进制文件,但得到了同样的错误。
      • 您可以尝试在没有 node_modules 文件夹的情况下推送它,以确保它不会仍在尝试使用您本地编译的版本而不是使用 ignoreModules?
      • 太好了,谢谢!原来我还必须实际删除 node_modules 文件夹,我认为带有 {'"ignoreNodeModules":true'} 的 cloudfoundry.json 足以忽略本地二进制文件:S
      猜你喜欢
      • 2018-11-29
      • 2021-11-18
      • 2019-10-20
      • 2023-03-16
      • 2016-11-29
      • 2015-06-14
      • 2013-07-28
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多