2012-09-25 4 views
2

저는 node.js 앱을 Cloudfoundry에 배포하고 있으며 모듈 의존성 만 복원됩니다. 나는 내 로컬 node_modules 디렉토리로 밀어 또한 stdout.log에두고 cloudfoundry.json에서 NPM의 수축 포장 및 'ignoreModules'를 사용하지만 항상 결국 시도했다 :Cloudfoundry에서 복원 '잘못된 ELF 헤더'

{ 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' } 

어떤 아이디어? 사전 :

편집에 감사 : 미안은 '무시 * 노드 * 모듈'의미

내 생각 엔이 모듈이 해당 지역의 아키텍처 컴파일되어

답변

2

(예를 들어 86), 서버는 그것을 실행하려고 다른 아키텍처입니다 (예 : 64 비트). 노드 모듈은 npm이 빌드를 처리 할 수있는 C++ 확장을 가질 수 있습니다. 한 플랫폼에서 다른 플랫폼으로 node_modules 폴더의 바이너리를 이동할 필요는 없습니다. 다시 컴파일해야합니다.

Cloudfoundry에 대해 충분히 알지 못해서 어떻게하는지 알려주지 만, 다른 누군가가 더 좋은 대답을 가지기를 바랍니다.

+0

그건 내가 처음으로 '잘못된 ELF 헤더'를 보았지만 npm shrinkwrap과 ignoreModules를 사용하여 로컬 바이너리를 업로드하는 것을 피했지만 동일한 오류가 발생했습니다. – Stinomus

+1

node_modules 폴더없이 push를 시도해도 ignoreModules를 사용하는 대신 로컬로 컴파일 된 버전을 사용하려고하지 않는지 확인할 수 있습니까? – PherricOxide

+2

우수! 사실 나는 node_modules 폴더도 실제로 삭제해야했다. { ' "ignoreNodeModules": true'}를 사용하는 cloudfoundry.json은 로컬 바이너리를 무시하기에 충분했다. S – Stinomus

0

dev Docker 환경 설정과 비슷한 문제가 있습니다. docker 이미지에 내 소스 파일을 마운트하려고했지만 node_modules 디렉토리를 docker 이미지 용으로 컴파일해야했습니다. 도커 이미지에서 새 디렉토리를 만들었 으면 해당 디렉토리에 npm install을 입력 한 다음 내 소스 코드 중 일부에 대해 소프트 링크를 사용하여 동일한 동작을 보았습니다.

해결 방법 : 소프트 링크를 사용하지 마십시오.