2017-01-20 1 views
4

몇 달 동안 서버 측 노드 애플리케이션을 몇 달 동안 맞춤식 앱 엔진 런타임에 아무 문제없이 배포했습니다. 그것에 관한 유일한 반쪽 흥미로운 점은 컨테이너를 만들 때 소스에 대한 실행 바벨 (babel)입니다.gcloud App Engine Docker 및 Babel을 사용하는 유연한 외설용

이 지난 몇 주 동안 원격 빌드 로그에서이 효과에 대한 오류가 발생하여 간헐적으로 실패했습니다.

import * as deps from './AppFactory'; 
SyntaxError: Unexpected token import 

바벨 전이가 일어나지 않았다고 생각하는 선도. gcloud의 CLI가 표시 비록은 다음과 같습니다 Dockerfile에서 DIST/인덱스 파일

> node_modules/babel-cli/bin/babel.js src/ -d dist/ 

src/AppFactory.js -> dist/AppFactory.js 
src/Ddl.js -> dist/Ddl.js 
src/Helpers.js -> dist/Helpers.js 
src/MemoryResolver.js -> dist/MemoryResolver.js 
src/Mysql.js -> dist/Mysql.js 
src/Schema.js -> dist/Schema.js 
src/index.js -> dist/index.js 
---> 0282c805d5c9 

절망에서 나는 고양이 밖으로. 내가 할 때 실제로 증발이 일어나지 않는다는 것을 알았습니다.

로컬로 도커 이미지를 만들면 모든 것이 완벽하게 작동합니다.

내 Dockerfile은 다음과 같습니다 아래

# Set the base image to Ubuntu 
FROM gcr.io/google_appengine/nodejs:latest 

ENV NODE_ENV production 

# File Author/Maintainer 
# Provides cached layer for node_modules 
ADD package.json /tmp/package.json 
RUN cd /tmp && npm install 
RUN mkdir -p /src && cp -a /tmp/node_modules /src/ 

# Define working directory 
WORKDIR /src 
ADD . /src 

RUN npm run deploy 
RUN cat /src/dist/index.js 

CMD ["npm", "start"] 

내 .babelrc 파일입니다

{ 
    "presets": [ 
    "es2015", 
    ] 
} 

그리고 내 바닐라 YAML 파일 :

service: metrics-api-test 
runtime: custom 
env: flex 
env_variables: 
    NODE_ENV: 'production' 
    NODEPORT: '8080' 
beta_settings: 
    cloud_sql_instances: pwc-sales-demos:us-east1:pawc-sales-demos-sql 

나는 모든 종류의 시도를하고 있어요 babel-register, babel-node와 유사합니다. 그들은 로컬 도커 이미지를 만들 때 완벽하게 작동합니다. 앱 엔진에 배포하면 모두 실패합니다.

나는 몇 달 전에 이것을 게시했는데 문제가 다시 나를 괴롭히기 시작했다. 간헐적 인 문제로 시작하여 매번 발생합니다. 이는 서비스와 심지어 다른 gcloud 프로젝트에서도 발생합니다.

이것에 대한 모든 통찰력은 나의 감사와 150 점을 얻는다.

+0

은 package.json 파일을 게시 할 수 있습니다. –

+0

Google 서버에 구축 된 이미지는 귀하가 제공 한 동일한 Dockerfile을 사용합니다. 이미지 구축 중에 Babel 증류가 발생하면 기본 이미지로 여기에 게시 한 Dockerfile의 일부 단계에서 일어날 수 있습니다 [gcr.io/google_appengine/nodejs](https://github.com/GoogleCloudPlatform/nodejs) -docker/blob/master/base/Dockerfile)은 증발을 수행하지 않습니다. 'npm install' 명령이나'npm run deploy' 명령에서 바벨 (babel) 추출이 일어나는가? 앞에서 언급 한 것처럼 ** package.json **을 확인하는 것이 도움이됩니다. – Nicholas

+0

예. 패키지 파일이 더 이상 그 상태가 아닙니다. 나는 바벨 의존성을 dev와 반대로 정상적인 의존성으로 적절히 옮겼다는 사실을 거의 100 % 확신하고 있습니다. 나는 할 수있을 때 이것을 다시 방문하려고 노력할 것이다. –

답변

0

이렇게 마침내 돌아 오는 중; 그건 완전히 내 잘못 이었어.

"dependencies": { 
    "babel-cli": "^6.24.1", 
    "babel-preset-es2015": "^6.24.1".... 

을하지만하지 있어야합니다

나는 그렇게 같은 런타임 종속성 좌향 선회에 모든 바벨 종속성을 이동했다고 생각했다. 모든 위의 및 Dockerfile 완벽하게 작동합니다 :

FROM gcr.io/google_appengine/nodejs:latest 

ENV NODE_ENV production 

# File Author/Maintainer 
# Provides cached layer for node_modules 
ADD package.json /tmp/package.json 
RUN cd /tmp && npm install 
RUN mkdir -p /src && cp -a /tmp/node_modules /src/ 

# Define working directory 
WORKDIR /src 
ADD . /src 

RUN node_modules/babel-cli/bin/babel.js src/ -d dist/ 
RUN cat dist/index.js 
CMD ["npm", "start"] 

더 이상 수동으로 파일을 빌드!

관련 문제