使用ClearDB在Heroku上设置Grails 2.3.5 App的问题

时间:2014-02-28 22:11:00

标签: grails heroku cleardb

我在Heroku服务器上设置了Grails 2.3.5应用程序,并且在tomcat启动时我一直收到以下错误:

    Caused by: java.sql.SQLException: Driver:com.mysql.jdbc.Driver@5a7359fe returned null for URL:jdbc:h2:mem:grailsDB;MVCC=TRUE;LOCK_TIMEOUT=10000 

我没有使用h2作为数据库。我想使用ClearDB。我的环境变量看起来都正确,并且在DataSource.groovy中看起来一切正常。我甚至设置连接字符串是硬编码,看看这是否会产生影响。纳达。

    production {
        datasource {
            dbCreate = "create-drop"
            url = "jdbc:mysql://us-cdbr-east-05.cleardb.net/heroku_5a952ab6aXXXXXXX?reconnect=true"

            username = "XXXXX"
            password = "xxxxx"
        }
    }

显然我错过了什么,但我看不清楚。 生产设置从哪里获取h2连接字符串?!

2 个答案:

答案 0 :(得分:3)

您没有显示完整的DataSource.groovy文件,但它可能在顶部(driverClassName = "org.h2.Driver")中有H2驱动程序。这些值是默认值,并且特定于环境的块将合并到其中以创建最终设置。您可以在production

中覆盖它
production {
   datasource {
      dbCreate = "create-drop"
      url = "jdbc:mysql://us-cdbr-east-05.cleardb.net/heroku_5a952ab6aXXXXXXX?reconnect=true"

      username = "XXXXX"
      password = "xxxxx"

      driverClassName = 'com.mysql.jdbc.Driver'
      dialect = org.hibernate.dialect.MySQL5InnoDBDialect
   }
}

此外,您应该在使用MySQL时始终指定方言。在大多数情况下,Grails会自动检测方言,但无法确定您是使用MyISAM还是InnoDB,因此默认使用为整个服务器配置的默认引擎类型的方言。较新版本的MySQL默认使用InnoDB,并且在任何版本中都可以轻松更改它,但如果您没有,或者它是旧版本,您将最终使用非事务性MyISAM表。指定方言可确保您的应用使用正确的表类型。

答案 1 :(得分:0)

我发现了问题的原因。 数据源的代码块在源中具有小写“s”。它应该是dataSource,而不是 datasource

当缺少此块时,默认情况下显示的是名为“grailsDB”的h2数据库。我无法在任何地方找到这个记录,因此我的困惑。

检查您的案例!!!!