2014-02-28 22 views
1

我一個Heroku的服務器上設置一個Grails 2.3.5應用程序,我不斷收到以下錯誤當Tomcat啓動時建立的Grails 2.3.5應用在Heroku:問題與ClearDB

Caused by: java.sql.SQLException: Driver:[email protected] 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連接字符串?!

回答

0

我發現我的問題的原因。 數據源的代碼塊在源代碼中有一個小寫「s」。它應該是數據源,而不是數據源

當此塊丟失時,它顯示默認爲名爲「grailsDB」的h2數據庫。我無法在任何地方找到這個記錄,因此我所有的困惑。

檢查情況!!!!

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表結束。指定方言可確保您的應用程序使用適當的表格類型。

+0

都能跟得上。在我的數據源塊中,我指定了mysql驅動程序。我甚至將driverClassName添加到生產塊。同樣的錯誤。 – winna