GAE+PHP/Rubyで拓く新世界

第3回 SQL4GでGAE+Railsを体験しよう

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

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

2010/2/23

サンプルアプリケーションをGAE+SQL4Gに対応させよう

 サンプルアプリケーションを、GAE+SQL4Gに対応させる手順を見ていきます。

 まず、通常のRailsアプリをGAE対応にするためのセットアップスクリプトをダウンロードし、実行します。

 実行の様子が出力されて行く途中でエラーが表示されますが、気にせずそのまま進みます。そして、既存のRailsアプリケーションの一部のファイルを上書きしても良いかという確認を求められます。

$ curl -O http://appengine-jruby.googlecode.com/hg/demos/rails2/rails2_appengine.rb
$ ruby rails2_appengine.rb
●実行中、エラーが表示される
=> Bundling gems
Calculating dependencies...
Updating source: http://gems.rubyforge.org
(中略)
=> Generating configuration files
/home/tnakagoshi/sql4gtest/.gems/bundler_gems/gems/rails-2.3.5/lib/initializer.rb:271:in `require_frameworks': no such file to load -- tmail (RuntimeError)
(中略)
overwrite config/initializers/session_store.rb? (enter "h" for help) [Ynaqdh]

 「Y」を入力し、すべての上書きを許可します。

●上書きを許可
overwrite config/initializers/session_store.rb? (enter "h" for help) [Ynaqdh] Y
(中略)
##
## Now type 'dev_appserver.rb .'
##

 このスクリプトは、ActiveRecordを利用しない前提でセットアップを行うため、次節でSQL4Gを利用するための設定を追加していきます。

environment.rbを書き換える

 セットアップスクリプト(rails2_appengine.rb)では、ActiveRecordを使用しない設定になるため、environment.rbを書き換えて、SQL4Gを利用してGAE上にH2のデータベースを作成するためのコードを追記します。

●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

database.ymlを書き換える

 セットアップスクリプトは、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:

Gemfileに設定を追加

 セットアップスクリプトで作成されたGemfileに、必要な設定を追記します。

●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 'i18n'
gem 'tzinfo'
gem 'builder'
gem 'activerecord-jdbc-adapter' # この行を追加します

SQL4G/データベースアクセス関連ライブラリの配置

 セットアップスクリプトはActiveRecord-JDBCを使わない前提のため、このライブラリのJarファイルが配置されません。そこで、JRubyにあらかじめインストールしておいたactiverecord-jdbc-adapterから、必要なJarファイルをアプリケーション内にコピーします。

$ cp ~/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.2/
lib/jdbc_adapter/jdbc_adapter_internal.jar WEB-INF/lib

 そして、肝心要のSQL4GのコアライブラリのJarファイル(sql4g.jarおよびls-h2mod.jar)を配置します。ここでは、ホームディレクトリにJarファイルがあると仮定します。

$ cp ~/sql4g.jar WEB-INF/lib/
$ cp ~/ls-h2mod.jar WEB-INF/lib

jruby-rackライブラリのアップデート

 今回のセットアップ環境に含まれているWEB-INF/lib/jruby-rack-0.9.5.jarは、ActiveRecord-JDBCやSQL4Gと相性が悪く、アプリケーション動作時にエラーとなることがあります。

 この問題は、jruby-rackの0.9.6で解消しているようなので、下記の手順でダウンロードし、WEB-INF/libにあるjruby-rack-0.9.5.jarを上書きしてください。

$ cd
$ curl -O http://appengine-jruby.googlecode.com/files/jruby-rack-0.9.6.jar
$ cp ~/jruby-rack-0.9.6.jar WEB-INF/lib/jruby-rack-0.9.5.jar

prev
2/3
next

Index
SQL4GでGAE+Railsを体験しよう
  Page1
GAE+Rails環境のセットアップ
簡単なRailsスクリプトを作成しよう
   Page2
サンプルアプリケーションをGAE+SQL4Gに対応させよう
environment.rbを書き換える
database.ymlを書き換える
Gemfileに設定を追加
SQL4G/データベースアクセス関連ライブラリの配置
jruby-rackライブラリのアップデート
  Page3
ローカル環境での動作確認
GAE上へのデプロイ

index GAE+PHP/Rubyで拓く新世界

 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 記事ランキング

本日 月間