1

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 接続文字列を取得するプロダクション セットアップはどこから?!

4

2 に答える 2

3

ファイル全体は表示されていませんDataSource.groovyが、おそらく上部のセクションに H2 ドライバーが含まれています ( driverClassName = "org.h2.Driver")。そこにある値はデフォルトであり、環境固有のブロックがそれにマージされて最終的な設定が作成されます。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 テーブルになってしまいます。方言を指定すると、アプリで適切なテーブル タイプが使用されるようになります。

于 2014-02-28T22:47:01.030 に答える
1

私は自分の問題の理由を見つけました。データ ソースのコード ブロックには、ソースに小文字の "s" があります。datasourceではなく、 dataSource である必要があります。

このブロックがない場合、デフォルトは「grailsDB」という名前の h2 データベースのようです。これはどこにも文書化されていないため、混乱しています。

あなたのケースをチェックしてください!!!!

于 2014-03-02T14:37:23.537 に答える