为Grails配置Openshift的DataSource.groovy

4
我正在尝试在Openshift上部署一个Grails应用程序。我正在使用本地构建的war文件进行部署。目前,我正在使用由rhc-app-show命令给出的url在DataSource.groovy文件中配置我的数据库。每当我尝试使用Openshift的环境变量(例如$OPENSHIFT_MYSQL_DB_HOST),它就会崩溃。对于如何在配置文件中使用这些变量,有什么想法或指针吗?谢谢。

如果您能提供有关应用程序行为的更多信息,那将非常有帮助 - 具体是发生了什么? - Paul Morie
3个回答

5

我没有使用过OpenShift,但是谷歌搜索引擎引导我到了FAQ页面,该页面列出了以下环境变量:

OPENSHIFT_MYSQL_DB_HOST
OPENSHIFT_MYSQL_DB_PASSWORD
OPENSHIFT_MYSQL_DB_USERNAME
OPENSHIFT_MYSQL_DB_URL
OPENSHIFT_MYSQL_DB_PORT

看起来这样应该可以:

production {
   dataSource {
      driverClassName = 'com.mysql.jdbc.Driver'
      dialect = org.hibernate.dialect.MySQL5InnoDBDialect

      String host = System.getenv('OPENSHIFT_MYSQL_DB_HOST')
      String port = System.getenv('OPENSHIFT_MYSQL_DB_PORT')
      String dbName = System.getenv('OPENSHIFT_APP_NAME')
      url = "jdbc:mysql://$host:$port/$dbName"
      username = System.getenv('OPENSHIFT_MYSQL_DB_USERNAME')
      password = System.getenv('OPENSHIFT_MYSQL_DB_PASSWORD')

      properties {
         ...
      }
   }
}

缺失的部分是数据库名-您是否有此信息? 我不确定 OPENSHIFT_MYSQL_DB_URL 的格式,但看起来您可能仅需使用 url = "jdbc:${System.getenv('OPENSHIFT_MYSQL_DB_URL')}"


1
数据库名称始终与您的应用程序名称相同,因此您可以使用OPENSHIFT_APP_NAME。我编辑了您的答案以添加该部分。 - user2879327

0
在 Grails 3.0.11 中,文件 application.yml
System.getenv 不起作用,所以我不得不手动配置连接数据库的 URL 在 mysql... 使用文档中的命令 https://developers.openshift.com/en/managing-port-forwarding.html
dataSource:
        dbCreate: update
        url : jdbc:mysql://thisIsTheUrlGetWithPort-ForwardCommandAndThePort:48381/server?verifyServerCertificate=false&autoReconnect=true&useSSL=false&requireSSL=false
        driverClassName: com.mysql.jdbc.Driver
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        username : admin9CzsS #this is a username example
        password : RR7y9uKw3t #this is a password example
        properties:
            jmxEnabled: true
            initialSize: 5
            maxActive: 50
            minIdle: 5
            maxIdle: 25
            maxWait: 10000
            maxAge: 600000
            timeBetweenEvictionRunsMillis: 5000
            minEvictableIdleTimeMillis: 60000
            validationQuery: SELECT 1
            validationQueryTimeout: 3
            validationInterval: 15000
            testOnBorrow: true
            testWhileIdle: true
            testOnReturn: false
            jdbcInterceptors: ConnectionState
            defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED

0

POSTGRES SQL 也可以使用...这个链接上有一个不错的教程...但数据源配置必须像这样配置...

 production {
       dataSource {
        dbCreate = "update"
        driverClassName = "org.postgresql.Driver"
        dialect = org.hibernate.dialect.PostgreSQLDialect   
        uri = new URI(System.getenv('OPENSHIFT_POSTGRESQL_DB_URL'))
        url = "jdbc:postgresql://"+uri.host+uri.path+"/"+System.getenv('OPENSHIFT_APP_NAME')
        username = System.getenv('OPENSHIFT_POSTGRESQL_DB_USERNAME')
        password = System.getenv('OPENSHIFT_POSTGRESQL_DB_PASSWORD')
    }

第二个选择...

 production {
       dataSource {
        dbCreate = "update"
        driverClassName = "org.postgresql.Driver"
        dialect = org.hibernate.dialect.PostgreSQLDialect   
        uri = new URI(System.getenv('OPENSHIFT_POSTGRESQL_DB_URL').toString())
        appname = System.getenv('OPENSHIFT_APP_NAME').toString()
        url = "jdbc:postgresql://"+uri.host.toString()+uri.path.toString()+"/"+appname
        username = System.getenv('OPENSHIFT_POSTGRESQL_DB_USERNAME').toString()
        password = System.getenv('OPENSHIFT_POSTGRESQL_DB_PASSWORD').toString()
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接