Google App Engine/Python でリクエストハンドラーの共通処理を簡潔にまとめる方法

最近、 Google App Engine をいじりはじめました。とりあえずスタートガイドに目を通して、簡単なアプリを作って勉強しているところです。

そのアプリでは、各ビューのクラスに共通の処理があるのですが、その処理をいちいち書くのが面倒くさいので、その処理をまとめたクラスをつくって、それを各ビューのクラスで継承させています。

例えばログイン中の google アカウントを読み込んだり、そのビューのテンプレートとなる HTML ファイルのパスを設定したりといった処理です。

以下のような感じです。

# 各ビューのクラスで共通の処理
class View(object):
    template_file = ''
    template_values = {}
    def __init__(self):
        # ビューのクラス名と同じファイル名の HTML ファイルをテンプレートにする。
        self.template_file = self.__class__.__name__ + '.html'
        # ログイン中の Google アカウントを取得する。
        self.template_values['google_account'] = users.get_current_user()
    def render(self):
        path = os.path.join(os.path.dirname(__file__), self.template_file)
        self.response.out.write(template.render(path, self.template_values))

# ホーム画面のビュー
class ViewHome(webapp.RequestHandler, View):
    # ホーム画面でのみ必要な処理
    ......
    self.template_values['hoge'] = hgoe
    self.render()

# カテゴリー画面のビュー
class ViewCategory(webapp.RequestHandler, View):
    # カテゴリー画面でのみ必要な処理
    ......
    self.template_values['hoge'] = hgoe
    self.render()

これまでクラスの継承とかそういうことを考えたことがなかったので、果たしてこの方法がよい方法なのかどうか、いまいちわかりません。

アドバイスいただけると幸いです。

さくらのレンタルサーバーに RubyGems をインストールする手順

準備

まず、これからいろいろとファイルをダウンロードするので、それらを保存しておくディレクトリをホームディレクトリに作成しておく。

% mkdir ~/src

作成した src ディレクトリに移動する。

% cd ~/src

RubyGems をダウンロード

ブラウザーhttp://rubyforge.org/projects/rubygems/ を開き、RubyGems の最新版を確認する(2008 年 9 月 29 日時点での最新版は 1.3.0 )。

上記URLの文書の「ダウンロード」をクリックして、rubygems-1.3.0.tgz の URL をメモる( http://rubyforge.org/frs/download.php/43985/rubygems-1.3.0.tgz )。

メモった URL を使って、以下のコマンドでダウンロード。

% ftp http://rubyforge.org/frs/download.php/43985/rubygems-1.3.0.tgz

RubyGems のインストール

以下のコマンドでダウンロードした RubyGemsアーカイブを解凍。

% tar zxf rubygems-1.3.0.tgz

解凍すると rubygems-1.3.0 というディレクトリが出来てるのでその中に移動。

% cd rubygems-1.3.0

次に以下のコマンドで RubyGems をインストール。

% ruby setup.rb --prefix=/home/User
(※/home/User の User はログインユーザー名で置き換える)

後半の --prefix=/home/User は、インストールするディレクトリを指定するオプション。さくらのレンタルサーバーで、ユーザーがファイルを作成できるのはホームディレクトリ以下だけなので、このオプションが必要。

インストールが正常に完了すると以下のメッセージが表示される。

RubyGems installed the following executables:
	/home/User/bin/gem18

If `gem` was installed by a previous RubyGems installation, you may need
to remove it by hand.
(※/home/User の User はログインユーザー名で置き換える)

このメッセージの前半に RubyGems がインストールされたパスが書いてあるので、~/.cshrc というファイルこのパスを自動的に探すように設定を追記する。

% vi ~/.cshrc

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin)

この行を以下のように変更。

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin /home/User/bin)
(※/home/User の User はログインユーザー名で置き換える)

それから、RubyGems のインストール先をホームディレクトリ以下に変更したので、環境変数 RUBYLIB と GEM_HOME のパスもこの ~/.cshrc で改めて定義しておく。

setenv RUBYLIB /home/User/lib
setenv GEM_HOME /home/User/lib/ruby/gem
(※/home/User の User はログインユーザー名で置き換える)

これが何をやっているのかは以下の文書に詳しく書いてある。

.cshrc を書き換えたら以下のコマンドで設定を有効にする。

% source ~/.cshrc
% rehash

これが何をやっているのかについては以下の文書に詳しく書いてある。

最後にバージョンの確認。

gem18 --version
1.3.0

ここで以下のようなエラーが出たら、環境変数の設定がマズいので見直す。

/home/User/bin/gem18:8:in `require': no such file to load -- rubygems (LoadError)
	from /home/User/bin/gem18:8
(※/home/User の User はログインユーザー名で置き換える

さくらのレンタルサーバーにリモートログインする手順

用意するもの

sshクライアント
Mac OS X なら Terminal.app 、Windows なら PuTTY あたり。
さくらのレンタルサーバーのホスト名とシェルにログインするためのユーザー名とパスワード
さくらインターネット仮登録完了のお知らせ(電子メール)に書いてある FTP サーバ名がホスト名で、FTP アカウントと FTP パスワードがそれぞれユーザー名とパスワード。

Mac OS X の Terminal.app を使う場合

Terminal.app を起動して以下のコマンドを入力して Enter キーを押下。

$ ssh さくらの FTP ユーザー名@さくらの FTP サーバ名

最初の一回目は「(yes/no)?」と質問されるので、yes と入力して Enter キーを押下。

次にパスワードを質問されるので、さくらの FTP パスワードを入力して Enter キーを押下。

Welcome to FreeBSD! というメッセージが表示されたらリモートログインは成功。

WindowsPuTTY を使う場合

PuTTY を起動して直後に表示される「PuTTY Configuration」のダイアログで、「ホスト名(またはIPアドレス)」にさくらの FTP サーバ名を入力し、接続タイプの選択肢には「SSH」にチェック入れて「開く」ボタンをクリック。

最初の一回目は「(yes/no)?」と質問されるので、yes と入力して Enter キーを押下。

次にどのユーザーでログインするのか聞かれるので、さくらの FTP ユーザー名を入力して Enter 。正しく入力できていれば次はパスワードを聞かれるので、さくらの FTP パスワードを入力して Enter キーを押下。

Welcome to FreeBSD! というメッセージが表示されたらリモートログインは成功。

最初の一回目にだけ聞かれる質問の意味は?

The authenticity of host 'ホスト名( IP アドレス)' can't be established.
DSA key fingerprint is なにやらアルファベットと数字とコロンとドットからなる文字列
Are you sure you want to continue connecting (yes/no)?  yes
Warning: Permanently added 'ホスト名( IP アドレス)' (DSA) to the list of known hosts.

これは暗号化された通信で接続するために必要な手続き。
以下の文書の解説が易しい。

さくらのレンタルサーバーに Ruby on Rails をインストールする手順

  • 2008年12月19日に修正を加えました。修正箇所はコメントを参照のこと。

Rails のインストール

%gem18 install rails

で、おしまい(コマンドを打ち込んでからインストールが完了するまでに数分かかった)。
インストール先は /home/User/lib/ruby/gem/bin 。

なお、参考にさせていただいた文書では --include-dependencies オプションを指定しているが、現在のバージョンではこのオプションを指定しても以下のようなメッセージが表示される。

INFO: `gem install -y` is now default and will be removed
(-y オプション(--include-dependencies オプションの省略文字)はデフォルトであり、いずれ削除される)

この -y(--include-dependencies)オプションは、RybyGems のパッケージをインストールしたりアップデートする際に、自動的に依存関係のパッケージをインストール、あるいはアップデートするように指示するオプションとのこと。

Rails のパスを通す

RubyGems をインストールしたときと同様、Rails がインストールされた /home/User/lib/ruby/gem/bin/ を ~/.cshrc に追記しておく。

vi ~/.cshrc

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin /home/User/bin)

これを以下のように変更。

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin /home/User/bin /home/User/lib/ruby/gem/bin)

動作を確認

%rails --version

と打ってみて以下のように表示されたらインストール成功。

Rails 2.1.1