サンプルアプリケーションを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のデータベースを作成するためのコードを追記します。
# 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# 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
    enddatabase.ymlを書き換える
セットアップスクリプトは、database.ymlでも、データベースアクセスをしない設定にしていますので、これをSQL4Gでアクセスする設定に書き換えます。
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に、必要な設定を追記します。
# 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
|  | 2/3 |  | 
| Index | |
| SQL4GでGAE+Railsを体験しよう | |
| Page1 GAE+Rails環境のセットアップ 簡単なRailsスクリプトを作成しよう | |
|  | Page2 サンプルアプリケーションをGAE+SQL4Gに対応させよう environment.rbを書き換える database.ymlを書き換える Gemfileに設定を追加 SQL4G/データベースアクセス関連ライブラリの配置 jruby-rackライブラリのアップデート | 
| Page3 ローカル環境での動作確認 GAE上へのデプロイ | |
|  | 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の世界を体験してみよう | 
 フィード  2.0/1.0/0.91
フィード  2.0/1.0/0.91
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
 C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る
- エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
 C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る
- VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
 指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します
- さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
 日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|  | |
| 
 | |
|  | 

 








