노드 앱을 실행할 때 bcrypt 잘못된 엘프 헤더
저는 학교에서 nodejs 프로젝트를 하고 있습니다.나는 npm으로 bcrypt를 설치할 수 없어서 bcrypt-nodejs를 설치했고 어제 프로젝트가 잘 진행되었습니다.하지만 오늘 "노드 앱"을 실행하면 다음과 같은 오류가 발생합니다.
/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79
throw e
^
Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
내 소포json 파일은 다음과 같습니다.
{
"name": "Supinfarm",
"version": "0.0.0",
"env": {
"PYTHON": "/usr/bin/python2.6"
},
"dependencies": {
"express": "3.1.0",
"connect-flash": "*",
"jade": "*",
"stylus": "*",
"passport": "*",
"passport-local": "*",
"mongoose": "*",
"bcrypt": "*"
}
}
저는 Linux ubuntu 10.04 LTS에 있습니다. 구글에서 해결책을 찾으려고 노력했지만 성공하지 못했습니다...누가 나 좀 도와줄래요?
OSX에서 컴파일된 bcrypt는 Linux에서 제대로 작동하지 않는다는 것을 알게 되었습니다.즉, 로컬 OSX 워크스테이션에서 컴파일된 bcrypt를 체크인하고 Linux 서버에서 노드 앱을 실행하려고 하면 위의 오류가 나타납니다.
솔션:npm install bcrypt
Linux에서 확인하고 해결합니다.
이 문제를 해결하는 가장 좋은 방법은 .gitignore...에 있는 node_modules를 제외하는 것입니다.원격으로 설치할 수 있습니다.
만약 당신이 나처럼 도커 컨테이너 안에서 실행하고 있다면, 당신은 'node_modules'가 지정된 .docker 무시만 하면 됩니다.
일부 라이브러리는 호스트 시스템에서 컴파일해야 하므로 모듈이 오래될 수 있습니다.
docker-compose.yml 파일에서 문제가 발생했습니다. dockerignore에 node_modules가 이미 있었지만 node_modules 디렉토리를 볼륨으로 추가해야 했습니다.
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
이 문제를 해결할 수 있는 간단한 방법이 있습니다.
암호 제거
npm uninstall bcrypt
2.- bcrypt 다시 설치
npm i bcrypt
이 오류는 bcypt를 설치할 때 npm이 시스템 및 운영 체제에 대한 권장 버전을 설치하지만 다른 시스템에 있을 때는 이 버전이 작동하지 않기 때문에 발생합니다.
업데이트 ---------------------------------
또한 crypt 설치에 대한 루트 권한을 부여하는 또 다른 솔루션인 것 같습니다. 이는 crypt가 자체 사용자를 사용하지만 권한이 없기 때문에 발생합니다.
프로젝트 폴더에 루트 권한을 부여해야 합니다.프로젝트 폴더 밖으로 이동한 다음
sudo su
그런 다음 루트 암호를 입력하여 루트 사용자 권한을 가져옵니다.
프로젝트 폴더에 권한 부여
chmod -R 777 <project_folder>
프로젝트 폴더로 이동하여 bcrypt 설치
cd <project_folder>
그리고.
npm i bcrypt --unsafe-perm=true --allow-root --save
준비, 모든 것이 괜찮았다면 암호화 모듈은 문제없이 설치될 것입니다.
저도 같은 문제를 발견했습니다.Windows를 사용하여 AWS Lambda에 코드로 배포했습니다.저도 같은 오류가 발생했습니다.저는 'bcryptjs' npm 라이브러리를 사용하여 수정했습니다.
npm install bcryptjs
저는 또한 bcrypt v.1.0.3에서도 같은 문제에 직면했습니다.최신 버전(3.0.1)으로 방금 업데이트되었으며 현재 정상적으로 작동합니다.
달려.
npm install bcrypt@latest --save
패키지를 다음으로 변경:
npm install bcryptjs
var bcrypt = require('bcryptjs');
기능은 동일합니다.
자세한 내용은 여기에서 확인하십시오. https://github.com/dcodeIO/bcrypt.js
내 경우 윈도우에서 nodejs를 사용하고 있었는데, 도커(리눅스와 함께)를 사용할 때 그 오류가 발생했습니다. dockerignore 파일을 node_modules 폴더와 함께 추가하면 올바르게 작동하므로 윈도우의 nodejs 패키지는 리눅스에서 로드가 다르므로 리눅스에서 처음부터 설치하는 것이 좋습니다.
도커 컨테이너에 대한 이 문제를 해결하기 위해 사용합니다.
다음을 생성할 수 있습니다..dockerignore
과 같은구성을 합니다.
node_modules/
dist/
를 실행하는 하여 도에있경서실를기행는로하계다커를 실행하여 합니다.npm uninstall bcrypt
그리고 나서.npm install bcrypt
사용하는 플랫폼에 따라 암호 설치가 다를 수 있으므로 먼저 노드 모듈을 업로드하지 않고 Linux 시스템에서 npm 설치를 실행하고 있는지 확인합니다.다른 플랫폼에 대한 다른 설치 지침을 아래에서 확인할 수 있습니다.
https://github.com/kelektiv/node.bcrypt.js/wiki/://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
추가적인 문제가 있는 경우 노드 사전 gyp와 관련이 있을 수 있습니다.암호의 종속성입니다.
AWS Elastic Beanstalk의 경우 Node 8.x를 실행하는 Elastic Beanstalk에 배포할 때 node-gyp에 tmp 디렉토리에 쓸 수 있는 권한이 없습니다. bcrypt가 설치되지 않고 애플리케이션 배포가 실패합니다.
해결 방법은 .npmrc 파일을 프로젝트 루트에 추가하여 노드 gip을 루트로 실행하고 설치를 완료하는 것입니다..npmrc의 파일 내용:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true
다른 대안(아마도 더 올바른 방법일 것입니다)은 코드가 있는 .ebextensions 파일을 만드는 것입니다.
.ebextensions:00_change_npm_permissions.config:
"/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
chown -R nodejs:nodejs /tmp/.npm
이렇게 하면 노드 집프를 실행할 수 있는 충분한 액세스 권한을 얻을 수 있습니다.
Beanstalk에는 "AWS Elastic Beanstalk"의 됩니다..ebextensions/01_build.config
:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
cd /var/app/current/
rm -rf node_modules/bcrypt
sudo /opt/elasticbeanstalk/node-install/node-v10.13.0-linux-x64/bin/npm install bcrypt@latest
이것이 다소 번거로울 수 있다는 것은 알지만 해결책입니다.Bcrypt를 구현해야 할 때 Cloud 9 인스턴스를 시작했습니다.잘 모르시는 분들을 위해 Cloud9은 EC2 인스턴스에서 실행되는 기본 AWS IDE입니다.Cloud9에서 람다 함수로 코드를 업로드할 수 있습니다.그래서 제가 클라우드9에 기능을 작성했고, 제가 업로드했을 때 코드가 작동했습니다.
아키텍처의 차이일 수 있습니다. 구글 컴퓨팅 엔진을 사용하여 구글 클리피티 또는 구글 터미널에서 실행합니다.
npm uninstall bcrypt
그리고나서
npm i bcrypt
이것이 해결할 것입니다.
저는 보통 도커와 함께 macOS를 사용합니다. 패키지를 추가하기 위해 도커 서버에 먼저 들어갑니다.docker exec -it nameServer /bin/bash
그런 다음 패키지를 추가합니다.npm install bcrypt
예를들면.따라서 운영 서버에서 모든 작업이 실행될 것을 보장합니다.
언급URL : https://stackoverflow.com/questions/15809611/bcrypt-invalid-elf-header-when-running-node-app
'source' 카테고리의 다른 글
변수에 대한 스크립트를 사용하여 프로세스 ID를 서비스 이름으로 가져오는 방법 (0) | 2023.08.14 |
---|---|
앵커 태그 내에서 제목 속성의 스타일을 변경하는 방법은 무엇입니까? (0) | 2023.08.14 |
올바른 GROUP BY 쿼리가 Oracle에서 INSERT INTO와 결합될 때 작동하지 않음 (0) | 2023.08.14 |
null 참조에 대해 런타임 바인딩을 수행할 수 없습니다. Excel 셀 비우기 (0) | 2023.08.14 |
도커 구성 Y를 시작하기 전에 컨테이너 X 대기 (0) | 2023.08.14 |