GAE+PHP/Rubyで拓く新世界

第7回 GAE+SQL4GでRailsアプリ開発(リベンジ編)

萩原 巧
リトルソフト株式会社

中越 智哉
株式会社ナレッジエックス

2010/8/17

最終回となる今回は、進化したGAE、JRuby環境でリアルなRailsアプリを動かしてみます(編集部)

進化したGAE+JRuby環境で再挑戦!

 本連載の第5回でGAE上のRails開発に挑戦しました。Scaffoldを使ったアプリの動作を試みましたが、当時は残念ながらローカルでの動作は確認できたものの、GAE上で完全な動作を確認するには至りませんでした。あれから3カ月以上が経過し、GAEのインフラやJRuby側のGAE対応モジュールもバージョンアップされたことによって、状況は変わりつつあります。

 今回は、「リベンジ編」と題して、再びRailsアプリケーションをGAE上で動作させることにチャレンジします。GAE上でJRubyを動作させるためのモジュール群であるgoogle-appengine gemもバージョンアップしていますので、新しいバージョンでの操作方法などもあわせてご紹介していきたいと思います。

google-appengine gemのバージョンアップ

 連載第5回当時は、google-appengine gemのバージョンは0.0.9〜0.0.10でしたが、現在では0.0.15に上がっています。まずは、このバージョンをインストールしましょう。

●google-appengine gemのバージョンアップ(すでに旧バージョンをインストール済みの場合)
sudo gem update google-appengine
●google-appengine gemのインストール(新規にインストールする場合)
sudo gem install google-appengine

 新バージョンでは、ローカルサーバの起動やGAEへのデプロイのコマンドが変わっていますが、基本的な使い方は同じです。おさらいの意味も込めて、現バージョンでの手順を以下にご紹介します。

google-appengine gem 0.0.15でのセットアップ手順

 この連載では、RailsアプリをGAE上で動作させるための手順を「ノーマルのRuby環境で動作するRailsアプリをまず作り、これをGAE上で動作するように置き換えていく」という方針で考えていました。今回も同様の戦略で手順をご紹介したいと思います。

(1)セットアップスクリプトの実行

 ノーマルのRuby環境で動作するRailsアプリをGAE上で動作するようにするには、いくつかの手順が必要でした。まずは、セットアップスクリプトを実行して、RailsアプリをGAE対応の構成に変更する必要があります。

 最新版では、Rails 2.3.8が前提となっていますので、CRuby環境にRails 2.3.8をインストールしておいてください。その後、セットアップスクリプトを実行します。ゼロから新規にアプリケーションを作る場合は、アプリケーション用のディレクトリだけを作り、その中でセットアップスクリプトを実行するだけでもかまいません。

●セットアップスクリプトの実行(新規にアプリを作成する場合)
mkdir Railsアプリを格納する予定のディレクトリ名
cd 上記で作成したディレクトリ名
curl -O http://appengine-jruby.googlecode.com/hg/demos/rails2/rails238_appengine.rb
ruby rails238_appengine.rb

(2)environment.rbの書き換え(SQL4G上のデータベース作成コードの追加)

 次に、environment.rbの書き換えを行います。この手順については、連載第5回までと同じですが、変更箇所を再掲します。

●environment.rbの一部抜粋(変更前)
  # Skip these so generators can run from MRI
  if defined? JRUBY_VERSION
    # Use DataMapper to access datastore
    require 'rails_dm_datastore'
    # Set Logger from appengine-apis, all environments
    require 'appengine-apis/logger'
    config.logger = AppEngine::Logger.new
    # Skip frameworks you're not going to use.
    config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
  end
●environment.rbの一部抜粋(変更後)
  # Skip these so generators can run from MRI
  if defined? JRUBY_VERSION
    # Use DataMapper to access datastore
    require 'rails_dm_datastore'
    # Set Logger from appengine-apis, all environments
    require 'appengine-apis/logger'
    config.logger = AppEngine::Logger.new
    # Skip frameworks you're not going to use.
    # :active_recordを外す
    config.frameworks -= [ :active_resource, :action_mailer ] 
    # SQL4Gでデータベースを作成
    require 'java'
    Java::JpLittlesoftSql4g.GAdministrator.new("mydb#0", "sa", "", true) rescue nil
  end

(3) database.ymlの書き換え(SQL4G用の設定内容に書き換える)

 database.ymlの変更内容についても、以前のものと変わりませんが、内容を再掲します。

development:
  adapter: jdbc
  driver: jp.littlesoft.sql4g.Driver
  url: mydb
  username: sa
  password:
production:
  adapter: jdbc
  driver: jp.littlesoft.sql4g.Driver
  url: mydb
  username: sa
  password:

(4) Gemfileに設定を追加(SQL4Gが利用するJDBCアダプタのgemを追加)

 今回の連載では通常のRails環境に加えてSQL4Gを利用するため、ActiveRecordからJDBC経由でH2 Databaseに接続するためのgemを組み込む必要があります。google-appengine gemでは、Gemfileというファイルにデプロイ環境に組み込みたいgemを記述します。今回はactiverecord-jdbch2-adapterをデプロイ環境に組み込む必要がありますので、そのための設定を追記します。

●Gemfile
# Critical default settings:
disable_system_gems
disable_rubygems
bundle_path '.gems/bundler_gems'
# List gems to bundle here:
gem 'rails_dm_datastore'
gem 'rails', "2.3.5"
gem 'activerecord-jdbc-adapter' # この行を追加します

(5) SQL4G Jar/activerecord_jdbc Jarの配置

 SQL4Gを利用するために必要なJarファイルをWEB-INF/libに配置します。今回の環境ではSQL4G本体とそれが依存するJar、さらにActiveRecordからJDBCアクセスするために必要なJarを配置します。SQL4Gについてはパフォーマンスを含む機能強化が施されたバージョンアップ版が公開されています(本稿執筆時点での最新バージョンは0.10.6.7-alphaです)ので、最新版をダウンロードされることをおすすめします。SQL4Gの最新バージョンにおいて、WEB-INF/libに配置する必要のあるJarは、

sql4g.jar
log4j-1.2.15.jar
lsj-1.3.jar

の3つです。さらに、ActiveRecordからJDBCを利用するために必要なjdbc_adapter_internal.jarを配置します。

●Jarの配置(コピー元のディレクトリ位置は環境によって異なります)
cd
unzip sql4g-0.10.6.7-alpha.zip
cp ~/sql4g-0.10.6.7-alpha/war/WEB-INF/lib/log4j-1.2.15.jar ~/Railsアプリのあるディレクトリ/WEB-INF/lib/
cp ~/sql4g-0.10.6.7-alpha/war/WEB-INF/lib/sql4g.jar ~/Railsアプリのあるディレクトリ/WEB-INF/lib/
cp ~/sql4g-0.10.6.7-alpha/war/WEB-INF/lib/lsj-1.3.jar ~/Railsアプリのあるディレクトリ/WEB-INF/lib/
cp ~/jruby/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.7-java/lib/jdbc_adapter/jdbc_adapter_internal.jar ~/Railsアプリのあるディレクトリ/WEB-INF/lib

 また、第5回連載まではgoogle-appengine gemに含まれるjruby-rackのJar(バージョン0.9.5)がSQL4Gとの動作で不具合を起こすために、バージョン0.9.6を別途ダウンロードしてインストールする必要がありました。しかし、最新バージョンでは同梱されているjruby-rackのバージョンが上がっている(バージョン1.0.1)ため、そのままで問題なく動作します。

(6) ローカル環境でのGAE起動と動作確認

 ローカル環境でのGAE起動は、最新バージョンでは、dev_appengine.rbから、./script/server.shに変更されました。通常のRailsアプリケーションでは「./script/server」というRubyスクリプトでWebサーバを起動するので、それに近い名称に変更したものと思われます。アプリが起動したら、ブラウザで「http://localhost:8080/」にアプリケーションの動作を確認します。

●ローカル環境でのGAE起動
cd Railsアプリのあるディレクトリ
./script/server.sh

(7) app.yamlの書き換え(デプロイ用のアプリケーションID/バージョン番号の設定)

 ローカル環境での確認ができたら、app.yamlにデプロイ用の情報を書き込みます。これは以前のバージョンではconfig.ruに記述する内容でしたが、設定事項は別のファイルに分離されたようです。config.ruには記述する箇所がありませんので注意してください。下記のサンプルソースの抜粋を参考に、アプリケーションID(xxx.appspot.comのxxxの部分の文字列)とバージョン番号を記述します。

●app.yaml(関連部分のみ抜粋)
application: デプロイ先のアプリケーションIDをここに記述
version: 1   # ここにバージョン番号を記述します
runtime: jruby
(以下略)

(8)GAEサーバへのデプロイ実行

 GAEサーバへのデプロイを実行するコマンドも、最新バージョンでは、appcfg.rbから、./script/publish.shに変更されました。以前のバージョンよりも、より直感的なコマンド名になり、オプション指定も不要になりました。

●GAEサーバへのデプロイ
cd Railsアプリのあるディレクトリ
./script/publish.sh

(9)GAE上での動作確認

 デプロイが成功したら、GAE上での動作をブラウザで確認します。

連載の前回へ
1/2
next

Index
GAE+SQL4GでRailsアプリ開発(リベンジ編)
  Page1
google-appengine gemのバージョンアップ
google-appengine gem 0.0.15でのセットアップ手順
  Page2
実サイトに近いアプリをデプロイしてみる
リベンジ(?)成る
GAEやSQL4Gの今後の展開について
GAEのロードマップについて
SQL4Gのロードマップについて
最後に……

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間