gae上でjrubyを動かしたい。までの道のり1
何がしたいの?
- Google App Engine上でrubyアプリケーションを公開したい
どのように機能するの?
どこで確認したの?
- MacOSX (10.6.2 Snow Leopard) (Darwin Kernel Version 10.2.0)
- java 1.6.0_17
- appengine-java-sdk 1.3.1
- jruby jruby 1.4.0 (ruby 1.8.7 patchlevel 174)
- ruby 1.9.1p376 => 紆余曲折の末 動作できず。
- ruby 1.8.7 (2008-08-11 patchlevel 72) => 動作した!
いつ確認したの?
- 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)
次回 に続きます。