TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

Mac OS XでGAE/JRuby開発しようと思ったら「Could not find RubyGem appengine-tools」に悩まされた日々

社内向けの勉強会で、「プログラミング関連」「インフラ関連」「Webデザイン関連」をそれぞれ毎週一回30分程度の時間つかって行っていて前回やった後に

クラウドってよくわからないところがあるので、次回は何かそれを」

っていうリクエストがあったのと、色々な情報源をEvernoteへ取り込む自動化処理のためのスクリプトをcronで定期実行させる環境も欲しかったのでその目的もかねてGAE/JRubyの環境をつくったのですが、途中エラーが出てかなりはまったのですが、なんとか動くようになったので、他に同様のことで悩んでいる人の参考になるかと思ってまとめおきます

自分のMacの環境

Mac OS X 10.5.8

ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]

  • gem -vの結果

1.3.5

  • java -versionの結果

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-9M3165)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode)

どこまでは出来て、どこからエラーになるのか

appengine-jrubyで簡単GAE/JRuby開発 - しばそんノートで、おおまなか流れを理解しつつ、google-appengineのgemの公式サイトを参考にして、自分のMac上でgoogle-appengineをgem使ってインストールし、その後Gemfile、config.ru、guestbook.rbを作成し、config.ruは、自分のApplication IDを設定して

appcfg.rb update .

としたのですが、何度やっても
file:/Users/xxxxx/Dropbox/Public/learning_ruby/gae_guestbook/WEB-INF/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:827:in `report_activate_error': Could not find RubyGem appengine-tools (>= 0) (Gem::LoadError)

from file:/Users/xxxxx/Dropbox/Public/learning_ruby/gae_guestbook/WEB-INF/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:261:in `activate'
from file:/Users/hoyamada/Dropbox/Public/learning_ruby/gae_guestbook/WEB-INF/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:68:in `gem'
from /opt/local/bin/appcfg.rb:18
Error executing jruby
file:/opt/local/lib/ruby/gems/1.8/gems/jruby-jars-1.4.1/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:827:in `report_activate_error': Could not find RubyGem appengine-tools (>= 0) (Gem::LoadError)

from file:/opt/local/lib/ruby/gems/1.8/gems/jruby-jars-1.4.1/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:261:in `activate'
from file:/opt/local/lib/ruby/gems/1.8/gems/jruby-jars-1.4.1/lib/jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:68:in `gem'
from /opt/local/bin/appcfg.rb:18


というエラーが出て先に進まない・・

解決のために試みたこと

  • sudo gem uninstall google-appengine で、アインストールしてから、再インストールして実行→解決せず
  • guestbookというサンプルを作成したディレクトリとは別に全く新しいディレクトリを作成して、Gemfile、config.ru、guestbook.rbを作成し、config.ruは、自分のApplication IDを設定して
appcfg.rb update .

として実行→解決せず
・SnowLeopardの別のMac上で、sudo gem install google-appengineして、guestbookというサンプルアプリケーションを格納するディレクトリ作って、あとは上記同様の手順を実施→解決せず

この段階で2,3日費やしていたので、正直嫌になっていたから、しばらく放置して、気が向いたらエラーメッセージを手がかりにして、該当のRubyのソースファイルでも読もうかなぁーと諦めてお風呂に入ろうと決めた時に、

「もしかしたら、Mac標準のRubyではなくって、最新のRubyにしたらどうなるんだろう?」

という考えが頭をよぎり、最後の悪あがきをしました。

これで解決した!

Carpe Diemさんが書かれているRVM を使ってみたというエントリでRVM(RubyVersionManager)というのがあるのを知っていたので、これ使った方がMac標準のRubyにも影響なさそうな感じがして、gihyoの特集記事でRVMの使い方が書かれていたからそれを手がかりにして

% gem install rvm 
% rvm install ruby-head
% rvm use ruby-head
% ruby -v
ruby 1.9.3dev (2010-06-01 trunk 28119) [i386-darwin9.8.0]
% rvm gemdir
/Users/xxxxx/.rvm/gems/ruby-head
% rvm gemset create google-appengine
% rvm use ruby head@google-appengine
% gem install google-appengine
Successfully installed rack-1.1.0
Successfully installed jruby-rack-1.0.1
Successfully installed jruby-jars-1.4.1
Successfully installed appengine-rack-0.0.9
Successfully installed appengine-apis-0.0.16
Successfully installed appengine-sdk-1.3.4
Successfully installed bundler08-0.8.5
Successfully installed rubyzip-0.9.4
Successfully installed appengine-tools-0.0.13
Successfully installed google-appengine-0.0.13

としてから

% appcfg.rb update .
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://jruby.kenai.com/pages/JRuby_Builtin_OpenSSL
=> Generating configuration files
〜中略〜
情報: Successfully processed ./WEB-INF/web.xml
Beginning server interaction for xxxxxx...
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Initiating update.

っていうかんじになったあと、Emailのアドレスとパスワードの入力を促されたので「やったーここまで来た!」とドキドキしつつ、慎重に(?)アドレスとパスワード入力したら無事動いたよー。嬉しすぎる

根本原因はわかりませんがMac OS X 10.5、Mac OS X 10.6の両方やって最初うまくいかなかったことを考えると、Mac標準のRubyではなくって、ソースからインストールしたRubyの1.9系列を使えばサクっと動くのかもしれませんね。