第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に上がっています。まずは、このバージョンをインストールしましょう。
sudo gem update google-appengine
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回までと同じですが、変更箇所を再掲します。
# 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 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をデプロイ環境に組み込む必要がありますので、そのための設定を追記します。
# 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を配置します。
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/」にアプリケーションの動作を確認します。
cd Railsアプリのあるディレクトリ ./script/server.sh
(7) app.yamlの書き換え(デプロイ用のアプリケーションID/バージョン番号の設定)
ローカル環境での確認ができたら、app.yamlにデプロイ用の情報を書き込みます。これは以前のバージョンではconfig.ruに記述する内容でしたが、設定事項は別のファイルに分離されたようです。config.ruには記述する箇所がありませんので注意してください。下記のサンプルソースの抜粋を参考に、アプリケーションID(xxx.appspot.comのxxxの部分の文字列)とバージョン番号を記述します。
application: デプロイ先のアプリケーションIDをここに記述 version: 1 # ここにバージョン番号を記述します runtime: jruby (以下略)
(8)GAEサーバへのデプロイ実行
GAEサーバへのデプロイを実行するコマンドも、最新バージョンでは、appcfg.rbから、./script/publish.shに変更されました。以前のバージョンよりも、より直感的なコマンド名になり、オプション指定も不要になりました。
cd Railsアプリのあるディレクトリ ./script/publish.sh
(9)GAE上での動作確認
デプロイが成功したら、GAE上での動作をブラウザで確認します。
連載の前回へ | 1/2 |
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の世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、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を紹介する。※ショートカットキー、アクセスキーの解説あり
|
|