2012-11-14 3 views
0

Grails는 로컬에서 mongodb 플러그인과 잘 작동하지만 AppFog에 문제가 있습니다.MongoDB와 함께 Grails를 AppFog/CloudFoundry에 배포하는 방법은 무엇입니까?

MongoDB가 아닌 데이터베이스의 경우 AppFog에 Grails를 배포하는 방법은 상당히 명확합니다. 설명서는 MongoDB의 auto-config를 암시하는 것처럼 보입니다.하지만 다음에 설정된 구성이 있으면 작동하지 않습니다.

//DataSource.groovy 

grails { 
    mongo { 
    host = "localhost" 
    port = 27017 
    databaseName = "dbname" 
    } 
} 

자동 구성은 localhost를 적절한 호스트 이름으로 대체하지 않습니다. VCAP_SERVICES에서 값을 설정해야하는 것 같습니다.

+0

의견이없는 downvote는 무엇이 었나요? 네가 그럴 수 없다고 생각 했어? –

답변

2

Grails 프로젝트에 CloudFoundry plugin이 설치되어 있습니까? 플러그인은 Grails 앱에서 MongoDB 및 다른 데이터 소스에 대한 자동 재구성을 수행합니다.

어떤 이유로 Grails CloudFoundry 플러그인을 사용할 수 없거나 사용하지 않으려는 경우 위와 같이 환경 변수를 사용하는 또 다른 방법은 cloudfoundry-runtime Java API을 사용하는 것입니다. 이 API는 환경 변수에 저장된 것과 동일한 정보에 대한 액세스를 제공하지만 환경 변수를 직접 구문 분석하는 것보다 약간 깔끔합니다.

+0

AppFog에서이 기능을 사용해 보셨습니까? AppFog의 어떤 버전이 실행 중인지 잘 모르겠습니다. 이 기법을 지원합니까? –

+0

AppFog에서 직접 시도하지는 않았지만 제대로 작동 할 것으로 기대합니다. Grails CF 플러그인에는 앱과 함께 배포되는 코드가 포함되어 있습니다. 이 코드는 앱이 시작될 때 CF 환경을 감지하고 서비스를 구성하므로 CF의 스테이징 지원에 의존하지 않습니다. 그리고 Mongo (https://docs.appfog.com/services/mongodb#node)의 AppFog 문서는 Grails CF Plugin과 CF Runtime Java API가 의존하는 일반적인 CF 환경 변수를 제공한다고 말합니다. –

2

지원팀에 문의 한 후 대답은 VCAP_SERVICE 환경 변수를 사용하는 것이 었습니다. 웹에서 파고 들자, 설정에서 VCAP_SERVICES를 검색하고 사용하는 방법을 알아 냈습니다.

grails { 
    def vcap = System.env.VCAP_SERVICES 
    def credentials = vcap ? grails.converters.JSON.parse(vcap)["mongodb-1.8"][0]["credentials"] : null 
    mongo { 
     host = credentials ? credentials.hostname : "localhost" 
     port = credentials ? credentials.port : "27017" 
     username = credentials ? credentials.username : null 
     password = credentials ? credentials.password : null 
     databaseName = credentials ? credentials.db : "dbname" 
    } 
} 

나는 또한 a github gist this configuration을 만들었습니다.