Play! Heroku의 2.0 스칼라 에디션. Heroku는 Procfile에서 모든 구성 변수를 보거나 사용하지 않는 것 같습니다.Play 2.0 Scala Heroku 인스턴스가 Procfile의 모든 변수를 보지 못합니다.
mongodb.default.db = "nyancat"
mongodb.default.host = "localhost"
mongodb.default.port = 27017
이 지역 개발을위한 기본 설정해야한다 :
는 예를 들어, 내 application.conf에 내가 (다른 사람의 사이에) 다음 변수를 가지고있다. 그러나, 나는 Heroku 인스턴스가 MongoLabs 인스턴스를 사용하기를 원합니다. (불행하게도, Salat은 URI를 구성하지 않습니다, 그래서 호스트, 포트, 궁시렁 궁시렁, 즉 MONGOLAB_URI을 사용하지 않는 아래로 그것을 깰했다)
내 Procfile 이제 다음과 같습니다
☆ cat Procfile
web: target/start -Dsecurehostname="https://example.org" \
-Dhostname="http://example.org" -Dhttp.port=$PORT \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=$DATABASE_URL -Dredis=$REDISTOGO_URL \
-Dmailgun.apikey=$MAILGUN_API_KEY -Dmongodb.default.db="heroku_appXXXXXXX" \
-Dmongodb.default.host="dsXXXXXX.mongolab.com" -Dmongodb.default.port=XXXXX \
-Dmongodb.default.user="heroku_appXXXXXXX" \
-Dmongodb.default.password="foobared_not"
나는 밀어 넣고 다시 시작하지만 원격 MongoDB 연결은 여전히 localhost에 연결된다고 말합니다 : 27017
Redis 그리고 다른 모든 것은 훌륭하게 멋지게 작동합니다. 시작할 때
원격 로그이를 표시하고 명확 내 Procfile의 모든 매개 변수가 포함되어 있지 않습니다
2012-05-20T19:35:18+00:00 heroku[web.1]: Starting process with command \
`target/start -Dhostname="https://example.org" -Dhttp.port=XXXXX \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=<HIDDEN> -Dredis=<HIDDEN> -Dmailgun.apikey=<HIDDEN>`
, 즉 mongo.*
매개 변수는 로그의 모든 위치에 없습니다.
내가 무엇이든 놓치면 알려주세요. 감사합니다.
UPDATE
나는 sbt stage
을 사용하고 foreman start
와 응용 프로그램을 실행, 로컬 Heroku가를 모방하려고 노력했다. 나는 는 Heroku가 설정할 수 것이다 환경 변수를 설정하고 다음과 같이 실행 : 그것은 Heroku가 아마도 사용하고 내 주장의 유효성을 검사하는 Procfile,에서와 같이
app git:(master) ☆ DATABASE_URL="jdbc:h2:mem:mydatabase;MODE=PostgreSQL" \
REDISTOGO_URL="redis://ignored:[email protected]:6379/" \
foreman start
20:20:27 web.1 | started with pid 43382
20:20:27 web.1 | Play server process ID is 43382
20:20:29 web.1 | [info] play - database [default] connected at jdbc:h2:mem:mydatabase
20:20:29 web.1 | [info] play - mongodb [default] connected at "heroku_appXXXXXXX"@"dsXXXXXX.mongolab.com":XXXXX/"heroku_appXXXXXXX"
20:20:30 web.1 | [info] play - Application started (Prod)
20:20:30 web.1 | [info] play - Listening for HTTP on port 5000...
감독이 내 생산 MongoDB의 값을 선택합니다 알 수없는 이유로 내 Procfile의 이전 버전. 내가 MongoDB Salat plugin for Play Framework 2 (Scala only)을 사용하고
~ $ lsattr Procfile
------------------- Procfile
업데이트 2
: 내 Heroku가 인스턴스에
는 Procfile는 불변의 플래그 중 하나를 설정하지 않습니다 확실히이다.여기에 내가 집어 패턴입니다 :
은 모든 내가 MongoDB의 지원을 구현 시작하기 전에 이 성공 밀어 넣습니다.
그런 다음 MongoLabs 계정에 가입하여 Salat plugin을 통합했습니다. 재미가 시작되었습니다. 위의 플러그인은 com.mongodb.MongoURI을 지원하지 않으며 구성을 분석하는 방식으로 인해 -Dmongodb.uri
을 제공하면 파열됩니다. "default"와 같은 키 스페이스가 필요합니다.
위의 그림에서 보았 듯이 mongodb.default.*
스위치로 돌아 왔습니다.
지금 내 개발주기는 다음과 같습니다
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
...
그리고 가장 성가 시게, 실패한 푸시 그냥이 기록합니다
Heroku push rejected due to an unrecognized error.
... 그리고
heroku logs -t
출력은이 보여
를
2012-05-22T07:23:59+00:00 heroku[slugc]: Slug compilation failed: unrecognized error
로컬로 작동하며, BTW.
처음부터 명확하게 할 수있을 때 Typesafe's Config에 의해 던진 오류를 삼킬 수 있기 때문에 나는이 모든 것을 Heroku 지원에 집중했습니다.
나는 또한 두 번째 푸시 성공을 허용하지 말고 이전 Procfile을 사용하도록 요청했습니다. 매우 오도 된.
말할 필요도없이, 이제 Salat 플러그인에 대한 MongoURI 지원도 구현 중입니다.
UPDATE 재생에 mongodb.default.uri
3
I've implemented support! Salat 플러그인 (그리고 lib /를 사용하여 배포했습니다.) 그러나 Heroku는 Procfile에서 mongo 관련 항목을 누를 때마다 여전히 오류가 발생합니다.
나는 Heroku에서 같은 질문을하고 있는데, 아마도 여기있는 누군가가 대답 할 수 있습니다 : Heroku가 Procfile에서 사용할 수있는 변수를 제한합니까?
I가 재생의 작동 예 2 + MongoDB를 여기에 : https://github.com 아닌 environment variable 따라 구성 예에 대한/jamesward/play2bars/tree/scala-mongodb 아마도 이것이 작동하지 않는 이유를 알아내는 데 도움이 될 것입니다. –
제임스 감사합니다. 그렇지 않으면 목요일 밤 LFPUG에서보실 수 있습니다 :) – opyate
@JamesWard는'''-Dmongodb.uri = $ MONGOHQ_URL'' 비트 : JVM 스위치의 이름 지정에 어떤 의미가 있습니까? 나는. Heroku는 변수 이름의 사전 설정된 목록 만 허용합니까? 내가 사용한 것들은''mongodb.default. *'''라고 불렸다. 내 Procfile의 이전 버전이 캐싱되거나 사용되고 있다고 생각하기 시작했습니다. – opyate