2011年06月11日

DotCloudでJRuby on Rails

前回のDotCloudでRuby on Railsに引き続き、今日はJRuby on Railsです。
実際、僕自身もRailsは素晴らしいがJavaの資産も使いたい!と思うことが多く、JRuby on Railsはよく使います。

今回はNetBeans 6.9.1(on Mac OS X)をIDEに使いながら説明します。

51)
 
※NetBeansのインストール、Rails環境の初期設定は割愛します。

NetBeansでRailsアプリケーションを作成


NetBeansを起動後、右側ペイン(枠, pane)上で右クリックし、新規プロジェクトを作成します。

jror1


表示されるダイアログで「Ruby on Railsアプリケーション」を選択します。

jror2

プロジェクト名を入力(今回はJRoRApp)し、Rubyプラットフォームを選択します。

jror3


ここではNetBeans組み込みのJRuby 1.5.1を利用します。Warblerを使ってwarファイルを作成するので「Rakeターゲットを追加して・・・」もチェックします。

jror4

データベース構成ダイアログでは「データベース情報を直接指定」選択し、DBにはmysql(JDBCドライバ利用)を選択します。
※どちらを選んでも最終的には同じ結果になりますが、こちらの方が入力の手間は少ないので。

最後にRailsのミドルウェアの環境を設定します。今回はRails 2.3.8。

jror5

完了したら作成されたプロジェクトを右クリックして「プロパティー」を選択します。

jror6_1

ここでRails環境に「develpment」を選択しておきます。

続いてJDBCドライバのパスを設定します。MySQL用JDBCドライバをダウンロード後、同じく「プロジェクトプロパティー」からjava、「JAR/フォルダを追加」を選択し、ダウンロードしたドライバ「mysql-connector-java-***.jar」をパスに追加します。

jror6

ここまで出来たら、データベースの設定をする前にscaffoldでアプリケーションを作成してしまいましょう。
プロジェクを右クリックし、「生成」を選択。

jror7

表示されるダイアログでジェネレータにscaffold、モデル名、属性ペア(フィールド)を入力ます。

jror8

 ここではサンプル通りのモデルと属性を作成しています。

マイグレーションを行う前にデータベースを構築します。
今回はローカルのMySQLは利用せず、開発段階からDotCloud側のMySQLを利用します。
前回作成したnetbuffalo.dbを利用します。
 
$ dotcloud deploy --type mysql netbuffalo.db
Created "netbuffalo.db".

データベースのアクセス情報(パスワード、ポート番号)は ’dotcloud info データベース名’で確認しましょう。

$ dotcloud info netbuffalo.db
cluster: wolverine
config:
    mysql_password: *******(パスワード)
    mysql_serverid: -1
created_at: 1307065440.995131
name: netbuffalo.db
namespace: netbuffalo
ports:
-   name: ssh
-   name: mysql
    url: mysql://root:******@db.netbuffalo.dotcloud.com:5000(ポート番号)
state: running
type: mysql

先ずはDotCloudに接続してデータベースを作成。

$ dotcloud run netbuffalo.db -- mysql -u root -p
mysql> create database JRoRApp_development character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| JRoRApp_development |
| mysql               |
| netbuffalo          |
+---------------------+
4 rows in set (0.00 sec)

NetBeansに戻って、RAILS_ROOT(プロジェクト)/構成(config)/database.ymlを編集。

development:
  adapter: jdbc
  driver: com.mysql.jdbc.Driver
  #url: jdbc:mysql://localhost:3306/JRoRApp_development
  url: jdbc:mysql://db.netbuffalo.dotcloud.com:ポート番号/JRoRApp_development?characterEncoding=utf8
  encoding: utf8
  reconnect: false
  pool: 5
  username: root
  password: ******

※文字化け防止の為、JDBC URLにはエンコーディング(?characterEncoding=utf8)を指定します。

プロジェクトを右クリックし、データベースのマイグレーションを実行。

jror9

DotCloud側のMySQLと接続できればマイグレーションは成功します。

jror10

あと一息ですね。scaffoldで作成されたコントローラ(ここではPostsController)を開き、右クリックで表示されるメニューから「ファイルを実行」を選択します。

jror11

※indexメソッドのスコープ内で右クリックするとhttp://localhost:3000/posts/indexを開いてしまうので注意。

するとWEBrickサーバが起動し、ブラウザにhttp://localhost:3000/posts/が表示されるはずです。

jror12

ローカル環境でアプリケーションが作成出来ました。

NetBeansを使ったJRuby on Rails開発をもっと詳しく知りたい方はこちらがお勧め。


かんたんRuby on RailsでWeb制作
黒田 努 山本 不二也 
翔泳社 
売り上げランキング: 389807


JRuby on Railsシステム構築入門 (DB Magazine SELECTION)
橋本 吉治 
翔泳社 
売り上げランキング: 28408


DotCloud環境へのJRuby on Railsアプリケーションのデプロイ


前回、netbuffaloというnamespaceを作成済みなのでDotCloudにはサービスだけ作成します。
ここではnetbuffaloにjrorというサービスを作成。

$ dotcloud deploy netbuffalo.jror -t java
Created "netbuffalo.jror".

続いてDotCloud側のデータベースの構築。

$ dotcloud run netbuffalo.db -- mysql -u root -p
mysql> create database JRoRApp_production character set utf8;
Query OK, 1 row affected (0.00 sec)

NetBeansのプロジェクトを右クリックし、「プロジェクトプロパティー」からRails環境をproductionに変更後、データベースのマイグレーションを実行(database.yml/productionにDB接続設定を行っておくこと)。

さあ、warファイルを作成、といきたいところですが、その前にDB接続周りの設定が必要です。
先ずは、activerecord-jdbc-adapterで利用するgem設定を構成(config)/environment.rbに追記。

Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those specified here.
  # Application configuration should go into files in config/initializers
  # -- all .rb files in that directory are automatically loaded.

  # Add additional load paths for your own custom dirs
  # config.load_paths += %W( #{RAILS_ROOT}/extras )

  # Specify gems that this application depends on and have them installed with rake gems:install
  # config.gem "bj"
  # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
  # config.gem "sqlite3-ruby", :lib => "sqlite3"
  # config.gem "aws-s3", :lib => "aws/s3"

  config.gem "activerecord-jdbc-adapter", :version => '0.9.6'


利用しているgemのバージョンは「プロジェクトプロパティー」/Gemsから確認出来ます。

jror13_1

最後にJDBCドライバをRAILS_ROOT(プロジェクト)/ライブラリ(lib)の下にコピーしておきましょう。
ここにあるライブラリはWarblerが作成するwarファイルのWEB-INF/lib配下に含めてくれます。

以上で準備は完了です。プロジェクトを右クリックし、表示されるメニューから「Rakeタスクを実行」を選択。

jror14

war: Createタスクを実行しましょう。

jror15

画面下のペインでwarファイルの作成を確認。

jror16

作成されたwarファイルはNetBeans/JRoRApp(プロジェクト名)の下にあります。
これを作成したデプロイ用のディレクトリにコピーします。

$ mkdir war

$ cp ~/NetBeansProjects/JRoRApp/JRoRApp.war war/ 

デプロイ用ディレクトリを指定して、$ dotcloud push netbuffalo.jror warを実行。

$ dotcloud push netbuffalo.jror war
# upload war ssh://dotcloud@uploader.dotcloud.com:21122/netbuffalo.jror
# rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
building file list ... done
JRoRApp.war

sent 2.11M bytes  received 23.42K bytes  99.18K bytes/sec
total size is 15.16M  speedup is 7.11

Scheduling build
Fetching logs...
-- Beginning the build process [build:11f9c4c2111d]
Fetched code revision rsync-1307698060.9
 * Stopping Jetty servlet engine (was reachable on http://netbuffalo-jror:8080/). jetty
 * Jetty servlet engine stopped. jetty
   ...done.http://jror.netbuffalo.dotcloud.com/JRoRApp/posts * Starting Jetty servlet engine. jetty
 * Jetty servlet engine started, reachable on http://netbuffalo-jror:8080/. jetty
   ...done.

Connection to jror.netbuffalo.dotcloud.com closed.

DotCloudにアクセセスしてみると、

http://jror.netbuffalo.dotcloud.com/JRoRApp/posts

03)


動いてますね!



JRuby on Rails実践開発ガイド (Professional Ruby Series)
Ola Bini 
翔泳社 
売り上げランキング: 327818

Posted by netbuffalo at 02:45│TrackBack(0)ruby | cloud


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/3291280