ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

CloudBees上でGrailsにてDBにアクセス

google:CloudBeesGrailsアプリをアップできたので、DBにアクセスしてみた。

設定

以下にアクセスして、Databaseの新規追加を行う。

https://grandcentral.cloudbees.com/


CloudBees上での各種設定方法は、僕自身も四苦八苦しているうちに登録方法をみにつけたので省略する。
デフォルトではMySQLデータベースとして登録される。

Grailsアプリ上の設定

以下のサイトの Configuring CloudBees DataSourcesの内容を利用した。
CloudBees RUN@cloud Documentation

そのままコピペした。
コピペした上で、以下の3文字列を置換した。

  • BEES_DB
  • BEES_DB_USER
  • BEES_DB_PASS

設定後は以下のコマンドを実行し、warファイルをデプロイする。

# ${app_name}は適切に書き換えること
$ grails prod war
$ grails bees-app-deploy ${app_name}

結果を確認してみる

ざんねんながら自分のアプリケーションにアクセスしてみても404エラーとなっている。
http://${app_name}.${account_name}.cloudbees.net/

exception is org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.cloudbees.jdbc.Driver' for connect URL '[[jdbc:cloudbees://${app_name_db}]]'
    at org....
    ...
    ...

com.cloudbees.jdbc.Driverを生成できませんでした、と。

解決方法

2つある。

解決方法その1

CloudBeesの提供していると思われるJDBC機能を利用しない方法。
DataSource.groovyを書き換える。

DataSource.groovy
dataSource {
    pooled = true
//   driverClassName = "com.cloudbees.jdbc.Driver" 
    driverClassName = "com.mysql.jdbc.Driver"
}

environments {
    ...
    ...
    production {
       dataSource {
             dbCreate = "update"
//           url = "[[jdbc:cloudbees://${app_name_db}]]"
            url = "jdbc:mysql://ec2-75-xxx-xxx-xxx.compute-1.amazonaws.com/${app_name_db}"  // 適宜書き換える必要がある箇所
                                                                                            // mysqlサーバー名も僕の環境のものを一部掲載しておく。
           username = "${db_user}"      // 適宜書き換える必要がある箇所
           password = "${db_password}"  // 適宜書き換える必要がある箇所
       }
    }
}

解決方法その2

url属性情報を一部直さないといけないぽい。

DataSource.groovy
dataSource {
    pooled = true
    driverClassName = "com.cloudbees.jdbc.Driver" 
}

environments {
    ...
    ...
    production {
       dataSource {
             dbCreate = "update"
//           url = "[[jdbc:cloudbees://${app_name_db}]]"
           url = "jdbc:cloudbees://${app_name_db}"  // このカッコ、いらないんだって…クソッ
           username = "${db_user}"      // 適宜書き換える必要がある箇所
           password = "${db_password}"  // 適宜書き換える必要がある箇所
       }
    }
}


わかりにくい!

以上

広告を非表示にする