#chiroito ’s blog

Java を中心とした趣味の技術について

GAE上のRailsでDataMapperのCRUDを使用する

目的

Google App Engine上で動くRuby on RailsのプロジェクトでDataMapperによるCRUD画面を使えるようにします。
おそらく、Railsを利用する理由の1つはこれではないでしょうか。

環境

Windows7 Ultimate SP1
Ruby 1.8.7(C:/Ruby187にインストール済み)
appengine-sdk 1.4.2インストール済み
Ruby on Rails 2.3.11インストール済み
プロジェクトのパス C:\Users\xxx\gaerails(デプロイの設定済み)
PATHにC:/Ruby187/binが含まれています。
アプリケーションIDはxxxIDとします。

プロジェクトの作成やデプロイがまだできていない場合はこちら
GAE+Ruby+Railsプロジェクト作成 on Windows -2.3.11版-
GAE+Ruby+Railsプロジェクトのデプロイ

インストール

rails_dm_datastoreとactiverecord-nulldb-adapterをインストールしましょう。
gaeのツールやrailsは既にインストールされている想定です。
C:\Users\xxx>gem install rails_dm_datastore --no-rdoc --no-ri  
C:\Users\xxx>gem install activerecord-nulldb-adapter --no-rdoc --no-ri
C:\Users\xxx>gem list

*** LOCAL GEMS ***

actionmailer (2.3.11)
actionpack (2.3.11)
activemodel (3.0.5)
activerecord (2.3.11)
activerecord-nulldb-adapter (0.2.1)
activeresource (2.3.11)
activesupport (3.0.5, 2.3.11)
addressable (2.2.4)
appengine-apis (0.0.23)
appengine-rack (0.0.12)
appengine-sdk (1.4.2)
appengine-tools (0.0.17)
arel (2.0.9)
builder (2.1.2)
bundler08 (0.8.5)
dm-appengine (0.1.3)
dm-ar-finders (1.0.2)
dm-core (1.0.2)
dm-timestamps (1.0.2)
dm-validations (1.0.2)
extlib (0.9.15)
google-appengine (0.0.20)
i18n (0.5.0)
jruby-jars (1.5.6)
jruby-rack (1.0.6)
lexidecimal (0.0.1)
rack (1.2.1, 1.1.0)
rails (2.3.11)
rails_appengine (0.0.8)
rails_dm_datastore (0.2.16)
rake (0.8.7)
rubyzip (0.9.4)
tzinfo (0.3.25)

モデルの作成

今回は名前と年齢を持つ社員モデルを作ってみましょう。
C:\Users\xxx\gaerails>ruby script\generate scaffold emp name:string age:integer -f --skip-migration
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/emps
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists test/unit/helpers/
exists public/stylesheets/
create app/views/emps/index.html.erb
create app/views/emps/show.html.erb
create app/views/emps/new.html.erb
create app/views/emps/edit.html.erb
create app/views/layouts/emps.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/emps_controller.rb
create test/functional/emps_controller_test.rb
create app/helpers/emps_helper.rb
create test/unit/helpers/emps_helper_test.rb
route map.resources :emps
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/emp.rb
create test/unit/emp_test.rb
create test/fixtures/emps.yml
C:\Users\xxx\gaerails>ruby script\generate dd_model emp name:string age:integer -f
exists app/models/
exists test/unit/
force app/models/emp.rb
force test/unit/emp_test.rb

デプロイと確認

ここまでできたらappcfgを使ってデプロイを行いブラウザで確認します。
今回は http://xxxID.appspot.com/emps にアクセスします。
画面の使い方は省略しますが、これらの画面で作成したデータはapp engineのDatastore Viewerでも確認できます。また、この逆も可能です。
ただし、Datastore Viewで作成したデータにはDataMapperが管理で使う情報にnullを入れられるため注意が必要です。
せっかくですのでCRUDの画面を使いましょう。

なお、開発環境でdev_appserverを使って起動した場合は500エラーとなりアクセスできませんでした。

参考

Rails 2.3.11 on App Engine (DataMapper)