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

何がしたいの?

誰が使うの?

  • 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に成功しました。原因は分かりましたが対策が分かりませんした。



前回 からの続きです。

調べてみたもののどのように対策して良いものかわかりません。
切り分けのために大胆にも一旦ruby1.9環境を捨ててmacosの標準の1.8に戻ってみます。
その前にruby1.9でインストールした/opt/local/bin/appcfg.rbと
この後ruby1.8でインストールする/usr/bin/appcfg.rbの名前衝突を避けるために一旦1.9側のgemからappengine-toolsを削除します。

$ sudo gem uninstall appengine-tools
Password:
Remove executables:
	appcfg.rb, dev_appserver.rb

in addition to the gem? [Yn]  Y
Removing appcfg.rb
Removing dev_appserver.rb

You have requested to uninstall the gem:
	appengine-tools-0.0.10.1
google-appengine-0.0.10.1 depends on [appengine-tools (= 0.0.10.1)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  Y
Successfully uninstalled appengine-tools-0.0.10.1
$ 
$ which ruby
/opt/local/bin/ruby
$ 
$ sudo port uninstall ruby19
Password:
--->  Deactivating ruby19 @1.9.1-p376_0+nosuffix
--->  Uninstalling ruby19 @1.9.1-p376_0+nosuffix
$ 
$ which ruby
/usr/bin/ruby
$ 
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
$ 
$ 


gemのバージョンアップは先ほどと同じ手順で...と思いきやupdate_rubygemsが動作しません。
macportのgemはパスが通っている/opt/loca/binにupdate_rubygemsを配置してくれましたが、こっちはその気は無いようです。

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

*** REMOTE GEMS ***

rubygems-update (1.3.6)
$ 
$ which gem
/usr/bin/gem
$ 
$ sudo gem install rubygems-update
Successfully installed rubygems-update-1.3.6
1 gem installed
Installing ri documentation for rubygems-update-1.3.6...
Installing RDoc documentation for rubygems-update-1.3.6...
Could not find main page README
Could not find main page README
Could not find main page README
Could not find main page README
$ 
$ sudo update_rubygems
sudo: unable to execute /opt/local/bin/update_rubygems: No such file or directory
$ 


半分やけっぱちで直パスで叩いてみます。でもダメ。

$ 
$ sudo /Library/Ruby/Gems/1.8/gems/rubygems-update-1.3.6/bin/update_rubygems 
Error: Cannot find RubyGems Update Path!

RubyGems has already been updated.
The rubygems-update gem may now be uninstalled.
E.g.    gem uninstall rubygems-update
$ 
$ gem -v
1.3.1
$ 
$


結局 -update --sysytemでアップデートしました。

$ 
$ sudo gem update --system
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.6
:0:Warning: Gem::SourceIndex#search support for String patterns is deprecated
Updating RubyGems to 1.3.6
Installing RubyGems 1.3.6
RubyGems 1.3.6 installed

=== 1.3.6 / 2010-02-17
中略
$
$ gem -v
1.3.6
$ 


何度目だろうかリトライ...成功。

$ 
$ sudo gem install google-appengine
Password:
Successfully installed rack-1.1.0
Successfully installed appengine-rack-0.0.6
Successfully installed appengine-sdk-1.3.1
Successfully installed appengine-jruby-jars-0.0.6
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
8 gems installed

とうとう成功。そしてサヨウナラruby1.9。早すぎたんだ(ry....

$ 
$ appcfg.rb generate_app myhello18
=> Generating gemfile
=> Bundling gems
Calculating dependencies...
Updating source: http://gems.rubyforge.org
/Library/Ruby/Gems/1.8/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.
=> Packaging gems
=> Installing JRuby
=> Installing JRuby-Rack
=> Installing appengine-sdk
=> Generating rackup
=> Generating configuration files
$ 
$ 


そして開発サーバ起動...ちょっとエラーでているけど成功。

$ dev_appserver.rb myhello18
=> Booting DevAppServer
=> Press Ctrl-C to shutdown server
2010-03-23 23:17:53.344 java[67777:1707] [Java CocoaComponent compatibility mode]: Enabled
2010-03-23 23:17:53.347 java[67777:1707] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2010/03/23 14:17:55 com.google.appengine.tools.development.agent.impl.BlackList initBlackList
?v???I: Unable to read a jre library while constructing the blacklist. Security restrictions may not be entirely emulated. /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/plugin.jar
The server is running at http://localhost:8080/
^C$ 
$ 
$