0

Grails 在本地与 mongodb 插件配合得很好,但我在 AppFog 上遇到了问题。

对于 MongoDB 以外的数据库,在 AppFog 上部署 Grails 的说明非常清楚。该文档似乎暗示了 MongoDB 的自动配置,但如果我将我的配置设置为以下,它就不起作用。

//DataSource.groovy

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

自动配置似乎没有用正确的主机名替换 localhost。看来我需要从 VCAP_SERVICES 中设置值。

4

2 回答 2

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"
    }
}

我还创建了一个 github gist 这个配置

于 2012-11-14T23:47:47.430 回答
2

您的 Grails 项目中是否安装了CloudFoundry 插件?该插件对 Grails 应用程序中的 MongoDB 和其他数据源进行自动重新配置。

如果由于某种原因您不能或不想使用 Grails CloudFoundry 插件,则使用上面显示的环境变量的另一种方法是使用cloudfoundry-runtime Java API。此 API 使您可以访问存储在环境变量中的相同信息,但它比直接解析环境变量要干净一些。

于 2012-11-15T05:15:45.697 回答