これからはクラウドだぜ!ということで、この気持が冷めないうちになにかをはじめようと、Google App Engine(GAE)のアカウントを取得した。言語はRuby(JRuby)を選択し、自分がふだん使っているFreeBSDマシンに開発環境を構築した。例によっていくつかトラブルがあったので、メモを残しておく。
インストール対象のOSはFreeBSD 7.2-RELEASE-p5。まずは、JavaのSDKとしてFreeBSD FoundationのJava配布サイトからdiablo-jdk-freebsd7.i386.1.6.0.07.02.tbzを取得してpkg_addコマンドでインストールする。そのままだと日本語が文字化けするので、これを解消するために以下のコマンドを実行する。
% cd /usr/local/diablo-jdk1.6.0/jre/lib/fonts/ %sudo ln -s /usr/local/lib/X11/fonts/TrueType fallback %
JDKがらみでもうひとつ。このままGAE/JRuby開発環境を作って最後にアプリをGAEにデプロイしようとすると、(エラーメッセージを控えてない、ごめん)GAEのサーバとのSSLのコネクションができずにデプロイに失敗する。これを回避するための方法は、例えばDebianのca-certificates-javaパッケージなどを取得して、そのなかに含まれているcacertsファイルをdiablo-jdkのファイルと入れ換える。
% pwd /tmp % wget http://ftp2.jp.debian.org/debian/pool/main/c/ca-certificates-java/ca-certificates-java_20091021_all.deb % ar x ca-certificates-java_20091021_all.deb % tar xvf data.tar.gz % cd /usr/local/diablo-jdk1.6.0/jre/lib/security/ % sudo cp /tmp/usr/share/ca-certificates-java/cacerts ./ %
次にrubyとgem。rubyは最新の1.9.1-p376で、gemも最新の1.3.5をインストールした。これ自体はノープロブレム。そのあと、gemを用いてgoogle-appengineパッケージをインストールするのだが、このときいっしょにインストールされるrubyzip-0.9.1が使用しているftoolsがruby-1.9.1ではdeprecatedだとのことで、処理が途中で失敗してしまう。いろいろ調べて、以下のパッチの要領でftoolsのところをfileutilsで書き換えることにより解決した。
% pwd /usr/local/lib/ruby/gems/1.9.1/gems/rubyzip-0.9.1/lib/zip % diff -u zip.rb.orig zip.rb --- zip.rb.orig 2009-12-13 22:15:39.000000000 +0900 +++ zip.rb 2009-12-14 20:38:25.000000000 +0900 @@ -1,7 +1,7 @@ require 'delegate' require 'singleton' require 'tempfile' -require 'ftools' +require 'fileutils' require 'stringio' require 'zlib' require 'zip/stdrubyext' @@ -662,8 +662,8 @@ # ignore setuid/setgid bits by default. honor if @restore_ownership unix_perms_mask = 01777 unix_perms_mask = 07777 if (@restore_ownership) - File::chmod(@unix_perms & unix_perms_mask, destPath) if (@restore_permissions && @unix_perms) - File::chown(@unix_uid, @unix_gid, destPath) if (@restore_ownership && @unix_uid && @unix_gid && Process::egid == 0) + FileUtils::chmod(@unix_perms & unix_perms_mask, destPath) if (@restore_permissions && @unix_perms) + FileUtils::chown(@unix_uid, @unix_gid, destPath) if (@restore_ownership && @unix_uid && @unix_gid && Process::egid == 0) # File::utimes() end end @@ -1566,7 +1566,7 @@ tmpFilename = tmpfile.path tmpfile.close if yield tmpFilename - File.move(tmpFilename, name) + File.rename(tmpFilename, name) end end ino%
あとは手順どおりで、Sinatraを用いてRubyで書いたWebアプリケーションをGAEにデプロイできた。さてさて、これから先の最大の問題は、おれがRubyをほとんど知らんということだ。まあ、この先はじっくり勉強しながら進めることにしましょ。
最近のコメント