必要となる3つの手順のうち、前回までは、以下の2つを行いました。
1. DotCloud上にMySQLサービスを立ち上げる
2. ローカルPC上でRailsのMySQL接続の設定を行いデータフェッチ/ストアを行うアプリを作成する
最後は2で作成したRailsアプリをDotCloudにデプロイします。
こちらも簡単ですので、何ら臆することはありません。
最初にDotCloudのMySQLに繋いで、新規にデータベースを作成します。
ここでもデータベースのみ作成すればよく、テーブルの作成などは全てScaffoldがやってくれます。
dotcloud infoコマンドを使ってCloud MySQLのパスワードと接続ホスト/ポートを確認します。
#dotcloud info kazoku.db
...
config:
mysql_masterslave: true
mysql_password: xxxxxxxxx <---パスワード
...
ports:
...
- name: mysql
url: mysql://root:xxxxxxxxx@yyyyyyy.dotcloud.com:NNNNN <---ホスト:ポート
パスワードと接続ホスト/ポートが分かった所で、
sshでDotCloudに接続してからMySQLにログインすることもできますが、
今回はPC端末からDotCloudのMySQLに直接繋いでしまいましょう。
# mysql -uroot -pxxxxxxx -hyyyyyy.dotcloud.com -PNNNNN
...
mysql>
オプションが長いですが、これでMySQLに接続できます。
それでは早速データベースの作成です。
mysql>create database kazoku default character set utf8;
Query OK, 1 row affected (0.19 sec)
データベースを作成し終えてたら、次はRailsのMySQL接続設定です。
2.でローカルPCのMySQL接続設定をしたconfig/database.ymlに
DotCloud MySQLの接続設定を追加します。
2では"development"セクションでしたが、今回は"production"セクションです。
先ほど調べたパスワードとホスト/ポートを設定します。
<config/database.yml>
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: kazoku
pool: 5
username: root
password: xxxxxxxxxx
host: yyyyyyy.dotcloud.com
port: NNNNN
DotCloudはサービス毎にインスタンスが異なります。
つまり、rubyのアプリケーションサーバであるwwwサービスと、
MySQLサーバのあるdbサービスでは稼働するインスタンスが異なるため、
Socket接続ではなく、TCP接続の形式で、MySQL接続情報を記述しましょう。
それではDotCloudにデプロイしましょう。
# dotcloud push kazoku
デプロイログの中に、mysql2のgemインストールのログが出力されました。
ちゃんと認識されていて安心できます。
...02:59:51 [www] Installing mysql2 (0.3.11) with native extensions
最後に、Scaffoldで作成したUserテーブルをMySQLに作成します。
sshでDotCloudにログインして、rakeコマンドを実行しましょう。
#dotcloud ssh kazoku.www
~$ cd code/{approot}
~$ rake db:migrate
== CreateUsers: migrating
-- create_table(:users)
-> 0.0724s
...
Userテーブルの作成が終わり、
DotCloudにデータフェッチ/ストアのアプリがデプロイされました。
それでは yyyyyyyy.dotcloud.com/usersにアクセスしてみましょう。
うまくいくはず、、と思ってアクセスしたら
We're sorry, but something went wrong
と500エラー画面が表示されてしまいました。ログを見ると以下のメッセージが出力されていました。
==> /opt/nginx/logs/error.log <==
cache: [GET /users] miss
ただ、原因となるようなメッセージは出力されていません。
ローカルPC環境ではうまくいっているのに...
次回、この原因を探り解決したいと思います。
(続く)