1

stsを使用してgrails 2.0.3アプリケーションを開発しています。私は開発を行い、sts を閉じる前に、通常は自分のアプリケーションを cloudFoundry にデプロイします。私は HSQLDB を使用しており、これは DataSource.groovy です。

dataSource {
    pooled = true
    driverClassName = "org.h2.Driver"
    username = "mcg"
    password = "mcg"
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "update" // one of 'create', 'create-drop','update'
            url = "jdbc:h2:file:qhDB"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:file:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:file:prodDb"
        }
    }
}

私の問題は、アプリケーションを cloudfoundry にデプロイするたびに、クラウド上でデータベースが空になることです。

いくつかの提案?

4

3 に答える 3

2

@kenota は正しいですが、インスタンス全体がクラッシュして再構築される可能性があるという追加のリスクがあるため、/tmp. MySQL または PostgreSQL を使用する方がはるかに優れています。どちらも CloudFoundry で簡単に使用でき、パフォーマンスが大幅に向上します。さらに、複数の Web サーバー インスタンスが必要なほど十分なトラフィックがある場合は、すべて異なるデータを持つ複数のファイルベースのデータベースではなく、1 つのデータベースを共有します。

于 2012-05-17T18:49:52.083 に答える
1

これを行うことによって:

url = "jdbc:h2:file:prodDb"

データを保存するためにファイルを使用するようにH2に要求しています。ただし、問題は、相対パスを使用しているため、ファイルはWebアプリケーションの現在の作業ディレクトリ(通常は解凍されたWebアプリのルート)に作成されることです。

tomcatで実行すると、ファイルは次の場所にあります。/ opt / tomcat7 / webapps / app / prodDb前のアプリケーションを削除してアプリケーションを再デプロイすると、データベースファイルも削除されます。

それがまさにcloudfoundryで起こっていることだと思います。

データベースを保存するための絶対パスを定義する必要があります。

url = "jdbc:h2:file:/tmp/prodDb"
于 2012-05-17T13:09:08.587 に答える
1

cloudfoundy で MySQL サービスを使用して解決します。

于 2012-09-04T09:32:23.943 に答える