2017-05-04 3 views
1

Github에서의 환매 특약 https://github.com/damorton/dropwizardheroku-webgateway에게 Heroku 환경은 로컬 Heroku가 환경에 구축하고 웹팩 단계 후 <code>heroku local</code>하지만, 충돌을 사용하여 미세하기 때문에 응용 프로그램이 없습니다 실행

빌드 ./gradlew stage

Heroku가 응용 프로그램을 중단합니다 빌드의 webpack 단계에서 생성 된 bundle.js 파일을 읽으십시오.

heroku run bash을 사용하여 Heroku가 응용 프로그램으로 지금까지

  • 가 기록 완료하고 bundle.js 파일이 생성되는 경우 확인, 그것은이다.
  • 내 로컬 ENV와 유사한 자바 버전을 사용 java.runtime.version=1.8.0_131

Heroku가 로그 로그에서 응용 프로그램이 NullPointerException 을 던지고있다

Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them. 
2017-05-05T10:55:43.963570+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx350m -Xss512k -Dfile.encoding=UTF-8 
2017-05-05T10:55:45.617664+00:00 app[web.1]: INFO [2017-05-05 10:55:45,613] org.eclipse.jetty.util.log: Logging initialized @1649ms 
2017-05-05T10:55:45.696063+00:00 app[web.1]: INFO [2017-05-05 10:55:45,695] io.dropwizard.server.SimpleServerFactory: Registering jersey handler with root path prefix:/
2017-05-05T10:55:45.696110+00:00 app[web.1]: INFO [2017-05-05 10:55:45,695] io.dropwizard.server.SimpleServerFactory: Registering admin handler with root path prefix: /admin 
2017-05-05T10:55:45.696230+00:00 app[web.1]: INFO [2017-05-05 10:55:45,696] io.dropwizard.assets.AssetsBundle: Registering AssetBundle with name: assets for path /assets/* 
2017-05-05T10:55:59.241010+00:00 app[web.1]: InputString in is null with path assets/js/bundle.js 
2017-05-05T10:55:59.243502+00:00 app[web.1]: Exception in thread "main" java.lang.NullPointerException 
2017-05-05T10:55:59.243739+00:00 app[web.1]: at java.io.Reader.<init>(Reader.java:78) 
2017-05-05T10:55:59.243867+00:00 app[web.1]: at java.io.InputStreamReader.<init>(InputStreamReader.java:72) 
2017-05-05T10:55:59.243967+00:00 app[web.1]: at com.bitbosh.dropwizardheroku.webgateway.api.NashornController.read(NashornController.java:46) 
2017-05-05T10:55:59.244023+00:00 app[web.1]: at com.bitbosh.dropwizardheroku.webgateway.api.NashornController.<init>(NashornController.java:27) 
2017-05-05T10:55:59.244096+00:00 app[web.1]: at com.bitbosh.dropwizardheroku.webgateway.Main.run(Main.java:43) 
2017-05-05T10:55:59.244149+00:00 app[web.1]: at com.bitbosh.dropwizardheroku.webgateway.Main.run(Main.java:23) 
2017-05-05T10:55:59.244212+00:00 app[web.1]: at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:43) 
2017-05-05T10:55:59.244255+00:00 app[web.1]: at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:85) 
2017-05-05T10:55:59.244306+00:00 app[web.1]: at io.dropwizard.cli.Cli.run(Cli.java:75) 
2017-05-05T10:55:59.244391+00:00 app[web.1]: at io.dropwizard.Application.run(Application.java:79) 
2017-05-05T10:55:59.244436+00:00 app[web.1]: at com.bitbosh.dropwizardheroku.webgateway.Main.main(Main.java:26) 

system.properties 업데이트이는 Nashorn에 의해 발생 엔진은 NashornController.java이고 bundle.js 파일의 InputStream에서 생성 된 Reader을 나타냅니다.

내가 알아낼 수없는 것은 로컬에서는 정상적으로 작동하지만 Heroku 환경에서는 작동하지 않는 이유입니다. bundle.js 파일을 작성하지 않고 번들에 추가 된 Javascript 소스 코드를 평가하면 모든 것이 올바르게 작동합니다.

+0

은'항아리 안에 bundle.js' 있습니까? 전체 경로로 참조되어 있습니까? – codefinger

+0

@codefinger 제가 dropwizard를 사용하고 있습니다. 그렇습니다. 'bundle.js' 파일은 Heroku의 빌드/배포 단계에서 jar 파일로 패키지되어야합니다. – David

+0

@codefinger'bundle.js' 파일은 배포 슬러그에 포함되어 있어야하며 동일한 명령을 사용하여 로컬로 작동합니다. ./gradlew stage && heroku local' – David

답변

1

문제 봄 부팅 또는 Ratpack를 사용하지 않는 경우

Heroku가이 ./gradlew stage를 실행, 이것은 개발자가 플랫폼에서 운영하는 stage 작업에서 자신의 빌드하는 동안 발생하는 지정해야 의미합니다. stage이 의존하는 작업은 사전 정의 된 순서로 실행되지 않습니다. 결과적으로 installDist 이후에 webpack 작업이 실행되고 bundle.js이 존재하기 전에 Jar를 빌드합니다.

솔루션은 작업이 실행되는 순서를 정의합니다.

task stage(dependsOn: ['installDist', 'webpack', 'npmInstall', 'clean']) 
npmInstall.mustRunAfter clean 
webpack.mustRunAfter npmInstall 
installDist.mustRunAfter webpack 

https://devcenter.heroku.com/articles/deploying-gradle-apps-on-heroku#verify-that-your-build-file-is-set-up-correctly