gae上でjrubyを動かしたい。までの道のり1

何がしたいの?

誰が使うの?

  • rubyアプリケーションをgae上で公開したい人
  • 自サーバやレンタルサーバは運用したくないけどサービスを公開したい人
  • 動的なスケールアップが可能な環境でサービスを公開したい人

どのように機能するの?

  • appengine-java-sdkの上でjrubyを動作させます。jrubyの上でrubyを動作させます。
  • さらにそのrubyの上でrubyのライブラリやアプリケーションを動作させます。

何を使うの?

-appengine-java-sdk
-jruby
gem「google-appengine」に含まれており、別途用意する必要は無い。

どこで確認したの?

いつ確認したの?

  • 2010年3月23日

何か注意点はあるの?

手元の環境ではruby1.9ではアプリケーションの構築に失敗しました。ruby1.8でHelloWorldに成功しました。原因は分かりましたが対策が分かりませんした。

どんな手順でやるの?

実行パスが通っていることろにコマンドを配置します。
appengine-java-sdkを配置後、PATHを通します。

<del>$ ls /usr/local/lib/
appengine-java-sdk-1.3.1         
$ export PATH=$PATH:/usr/local/lib/appengine-java-sdk-1.3.1/bin/</del>

appengine-java-sdkはgem「google-appengine」に含まれており、別途用意する必要は無い。

google-appengineをインストール。と思いきやエラーです。
gemのバージョンが古いと言っています。

$ 
$ ruby -v
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]
$ 
$ sudo gem install google-appengine
ERROR:  Error installing google-appengine:
	bundler08 requires RubyGems version >= 1.3.5
$ 
$ gem -v
1.3.1

gem自身の更新どうやるんだっけ?と思い検索しているとなんだか怖いことを書いてあるのを見つけました。
gemのアップデートには気をつけて
手元の環境ではMacPortでインストールしたrubyを使用しているわけですが、
gemsはruby1.9の添付のgemsなので本来はport経由で更新するべきです。
しかし、port上には更新されたrubyはエントリされていません。

$ port outdated
No installed ports are outdated.
$ port list ruby19
ruby19                         @1.9.1-p376     lang/ruby19
$ 
$ ruby -v
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]
$ 

ちょっと怖いですがrubygems-updateとやらでgemsを更新してみます。

$ gem -v
1.3.1
$ 
$ gem search -r rubygems-update

*** REMOTE GEMS ***

rubygems-update (1.3.6)
$ 
$ sudo gem install rubygems-update
Successfully installed rubygems-update-1.3.6
1 gem installed
$
$ sudo update_rubygems
RubyGems 1.3.6 installed
$
$ gem -v
1.3.6
$ 

気を取り直してリトライします。今回はうまくいきました。
jrubyではなくCRubyのgemを使用します。

$ sudo gem install google-appengine
Successfully installed bundler08-0.8.5
Successfully installed rubyzip-0.9.4
Successfully installed appengine-tools-0.0.10.1
Successfully installed google-appengine-0.0.10.1
4 gems installed

appcfg.rbでアプリケーションmyhelloを作成します。
ディレクトリなどを作ってくれています...がLoadErrorでコケました。ファイルが無いとか言っています。

$ 
$ appcfg.rb generate_app myhello
=> Generating gemfile
/opt/local/lib/ruby/gems/1.9.1/gems/appengine-tools-0.0.10.1/lib/appengine-tools/gem_bundler.rb:63: warning: already initialized constant RUBY_ENGINE
=> Bundling gems
Calculating dependencies...
Updating source: http://gems.rubyforge.org
/opt/local/lib/ruby/gems/1.9.1/gems/bundler08-0.8.5/lib/bundler08/resolver.rb:115:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement
Caching: appengine-rack-0.0.6.gem
Caching: rack-1.1.0.gem
Installing rack (1.1.0)
Installing appengine-rack (0.0.6)
Done.
/opt/local/lib/ruby/gems/1.9.1/gems/appengine-tools-0.0.10.1/lib/appengine-tools/gem_bundler.rb:73: warning: already initialized constant RUBY_ENGINE
=> Packaging gems
=> Installing JRuby
=> Installing JRuby-Rack
=> Installing appengine-sdk
=> Generating rackup
=> Generating configuration files
file:/opt/local/lib/ruby/gems/1.9.1/gems/appengine-jruby-jars-0.0.6/lib/appengine-jruby-rubygems-0.0.6.jar!/rubygems/custom_require.rb:31:in `require': no such file to load -- .gems/bundler_gems/jruby/1.8/environment (LoadError)
	from file:/opt/local/lib/ruby/gems/1.9.1/gems/appengine-jruby-jars-0.0.6/lib/appengine-jruby-rubygems-0.0.6.jar!/rubygems/custom_require.rb:31:in `require'
	from /opt/local/lib/ruby/gems/1.9.1/gems/appengine-tools-0.0.10.1/lib/appengine-tools/bundler.rb:263:in `generate_xml'
中略
Error executing jruby
$ 


gemのロードに問題が起きているようです。
自分で1.9.1のディレクトリを作成しているのにjruby/1.8を探したいようです。
ruby1.9には対応してないってことなのかな?

$ ls hello/.gems/bundler_gems/jruby/
1.9.1
$ 
.gems/bundler_gems/jruby/1.8/environment (LoadError)

次回 に続きます。