Google App EngineのJRubyでSinatraを使って、Hello worldと表示するだけの準備~デプロイまでの最低限の流れをメモった。それでも結構長い工程になった。最終的にはTwitter Botとかを作りたいんだけど、けっこう難しそうだなあ。
とりあえず今回の工程の完成形はこれ。GAEアプリは初回起動にめっちゃ時間かかるので、誰もアクセスしていない状態だと、表示されるまでに数秒~数十秒かかることも。
JRubyのインストールとgemのセットアップ
まずはRVMを使ってJRubyをインストールする。結構時間掛かる。今回使用するJRubyのバージョンは1.5.6。
$ rvm install jruby
GAE用にgemsetを作る。
$ rvm gemset list
gemsets for jruby-1.5.6 (found in /Users/ruedap/.rvm/gems/jruby-1.5.6)
global
$ rvm gemset create gae
'gae' gemset created (/Users/ruedap/.rvm/gems/jruby-1.5.6@gae).
$ rvm gemset use gae
Now using gemset 'gae'
$ rvm gemdir
/Users/ruedap/.rvm/bin/rvm: fork: Resource temporarily unavailable
/Users/ruedap/.rvm/gems/jruby-1.5.6@gae
google-appengineライブラリのインストールする。
$ gem --version
1.3.6
$ gem search -r google-appengine
### REMOTE GEMS ***
google-appengine (0.0.19)
$ gem install google-appengine
GAE用プロジェクトを作成
appcfg.rb
を使ってGAE用プロジェクトを作成する。
$ rvm use jruby@gae --default
Using /Users/ruedap/.rvm/gems/jruby-1.5.6 with gemset gae
$ appcfg.rb generate_app gae-hello-world
dev_appserver.rb
を使ってローカルサーバーを起動して動作を確認する。
$ dev_appserver.rb gae-hello-world/
http://localhost:8080/ にアクセスして「Hello」と表示されればおk。ターミナルに戻ってCtrl+Cでローカルサーバー終了。
GAEにアクセスしてアプリを作成
ブラウザでGoogle App Engineにアクセスしてアプリを作成する。作成にはGoogleのアカウントが必要。今回はこんな感じで入力した。
Application Identifier: | gae-hello-world |
Application Title: | GAE Hello world |
Application Identifierに入力した文字列がサブドメインになるので、公開されるアプリのURLは今回の場合だとhttp://gae-hello-world.appspot.com/となる。Application Titleは良くわからないけど、管理画面で表示する名前に使われる程度かな?
サブドメインとアプリ名が決まったらCreate Applicationボタンを押してアプリを作成する。この時点で http://gae-hello-world.appspot.com/ にアクセス可能になるが、アクセスしても「Error: Not Found」と表示される。
GAE上に作成したアプリ情報をローカルのプロジェクトに追加
gae-hello-world/WEB-INF/app.yaml
内のapplication
の項目を、さきほどGAE上で作成したApplication Identifierと同じ文字列に修正する。
application: gae-hello-world
version: 1
runtime: jruby
今回はGAE用プロジェクト名とGAE上のアプリ名(Application Identifier)が同じなので変更はなし。
GAE上にプロジェクトをデプロイ
デプロイするにはappcfg.rb
を使ってupdate
を実行する。
$ appcfg.rb update gae-hello-world/
コマンド実行中にGAE(Google)のE-mailアドレスとパスワードを聞かれるので入力する。最後のほうでSuccess.と表示されればおk。
http://gae-hello-world.appspot.com/ にアクセスすると今度はちゃんと「Hello」と表示される。ここまでで、第一段階終了。
Sinatraのインストールとデプロイ用のセットアップ
上記の「Hello」はconfig.ru
に書かれたRackの処理で、Sinatraはまだ使ってない。というかインストールすらしていないのでまずインストールする。
$ gem install sinatra
Successfully installed tilt-1.2.2
Successfully installed sinatra-1.1.2
2 gems installed
デプロイ用にGemfile
を開いて、gemの部分にSinatraの行を追加する。
# Critical default settings:
disable_system_gems
disable_rubygems
bundle_path ".gems/bundler_gems"
# List gems to bundle here:
gem 'appengine-rack'
gem 'sinatra' # これを追加
次にconfig.ru
を開いて、Sinatraを起動するように書き換える。
require 'app'
run Sinatra::Application
最後にapp.rb
を作成して、SinatraでHello worldするコードを記述する。
require 'sinatra'
get '/' do
'Google App Engine上のJRubyでSinatraを使ってHello world!'
end
dev_appserver.rb
を使ってローカルサーバーを起動して動作を確認する。
$ dev_appserver.rb gae-hello-world/
http://localhost:8080/にアクセスして「Google App Engine上のJRubyでSinatraを使ってHello world!」と表示されればOK。ターミナルに戻ってCtrl+Cで終了。
GAE上にプロジェクトをデプロイ
本日2回目のデプロイ。やり方は1回目と同じ。
$ appcfg.rb update gae-hello-world/
2回目なのでE-mailアドレスとパスワードはたぶん聞かれない。再起動したりすると聞かれるっぽい。最後のほうでSuccess.と表示されればおk。
http://gae-hello-world.appspot.com/にアクセスすると「Google App Engine上のJRubyでSinatraを使ってHello world!」と表示される。ここまでで今回の全行程完了。おつかれさまでした。
参考にした以下の公式チュートリアルは、DataMapperでBigTableを使ったりしてもっと高度なことをやってるっぽいけど、それはまた今度。