2014-09-28 7 views
0

community-developed OpenShift cartridge을 nginx로 사용하고 있습니다. 카트리지의 빌드 스크립트 (수정하지 않고)는 잘 작동합니다. 그것은 그것을 제공하는 구성 파일과 함께 nginx 서버를 시작합니다. 그러나 빌드 스크립트를 수정하여 먼저 OpenShift 저장소로 디렉토리를 변경하고 npm install을 실행 한 다음 grunt build을 실행하여 내가 만든 Angular 응용 프로그램을 빌드합니다.OpenShift 사용자 정의 카트리지 및 NPM

내가이 작업을 수행 할 때 스크립트가 npm install이되면 EACCES, mkdir '/var/lib/openshift/xxxxxxxxxx/.npm' 오류가 계속 발생합니다. 일부 OpenShift forum posts이 문제를 해결하려고 시도했지만 다른 솔루션이 필요하다고 (적어도 내 경우에는) 나타납니다.

이렇게해서 npm을 이런 식으로 사용할 수 있는지, 아니면이 모든 것을 직접 수행하는 카트리지를 만들어야하는지에 관심이 있습니다.

+0

[유사한 문제] (http://stackoverflow.com/questions/26830194/npm-install-on-openshift-jenkins-gear)를 통해 초를 읽을 수 있다면 Jenkins와 NPM에서 OpenShift? 미리 감사드립니다. – OceanLife

답변

3

는 우리가 일반적으로 ~/.npm을 작성하는 데 필요한 액세스 권한이 없기 때문에, 우리는 NPM 캐시 (일반적으로 ~/.npm) 접근 폴더에 NPM 사용자 설정 (일반적으로 ~/.npmrc) 상황이 가야를 이동하는 방법을 찾아야한다. 다음 정보는 부분적으로이 문제에 대해 Redhat에 제출 한 bug report에서 제공됩니다.

환경 변수를 control the location of .npmrc으로 만들어야합니다. $OPENSHIFT_DATA_DIR.env이라는 파일 (내 응용 프로그램에 대한 셸 액세스 권한이 있음)을 만들었습니다. 이 파일 내에서, 나는 놓여있다 :

export NPM_CONFIG_USERCONFIG=$OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npmrc 

이것은 우리가 읽기/쓰기 할 수있는 권한이있는 장소에 .npmrc 디렉토리로 이동합니다. 당연히 디렉토리 .npmrc$OPENSHIFT_HOMEDIR/app-root/build-dependencies/에 만들어야합니다. 그런 다음, 내 사전 시작으로 webhook에서/초 내 빌드 스크립트에서, 나는 놓여있다 :

touch $OPENSHIFT_DATA_DIR/.env 

이 보장하는 .npmrc의 위치는 우리가/빌드 배포 할 때마다 액세스 할 수 있습니다 구성하는 환경 변수입니다. 이제 npm 캐시의 위치를 ​​이동할 수 있습니다. 먼저 .env 파일에서 touch을 실행하고 디렉터리를 $OPENSHIFT_HOMEDIR/app-root/build-dependencies/에 만듭니다. 다음을 실행하여 재구성을 완료하십시오.

npm config set cache $OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npm 

NodeJS 카트리지를 사용하지 않아도 배포 할 때마다 NPM에 액세스 할 수 있어야합니다. 위의 디렉토리 선택 사항은 원하는대로 변경할 수 있습니다.

0

장비의 ~/.npm 디렉토리에 대한 쓰기 권한이 없습니다. 네이티브 node.js 카트리지가 어떻게 설정되어 있는지 검토하고 (https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs) 사용자 정의 카트리지에 적용 할 수 있는지 확인하십시오.

+0

이걸 보았습니다 만, 설치 스크립트가'touch "$ OPENSHIFT_HOMEDIR /. npmrc와 같은 일을 할 수있는 권한을 어떻게 가지고 있는지 혼란 스럽습니다. 나는 이것을 할 권한이 없다. – nmagerko

+0

카트리지와 그 스크립트는 거기에 액세스 할 수 있지만 ssh를 할 때는 사용하지 않으며 .openshift/action_hooks는 액세스하지 않습니다. –

+0

적당량의 재구성을 통해이 문제를 해결할 수있는 것처럼 보입니다 (적어도 npm은 가능). 아래 내 대답을 참조하십시오. – nmagerko

관련 문제