Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2009年08月19日]

「さくらのレンタルサーバ」で Ramaze を CGI として動かす(2009/07版) その1

2009年08月19日 20:57更新 筆者:K.Ktouth

Rails や Merb などの著名ウェブアプリフレームワークは「サーバとして動作されるのを想定」して設計されています。
一つのプロセスを使い回してレスポンス速度を稼いでいるわけですが、さくらインターネット株式会社の「さくらのレンタルサーバ」では規約上、常時起動を前提とするプログラムは動かすことが出来ません。
そうなれば CGI プログラムとして起動するしかありませんが、その場合、アクセスがあるたびにプログラムを起動する必要が出るため、Rails などは非常に重くなってしまいます。

その点、Ramazeをはじめとするいくつかのフレームワークは(Railsに比べれば)軽いため、このようなレンタルサーバでのCGI起動に向いているとおもいます。
ただし、「さくらのレンタルサーバ」には rubygems も導入されていないため、最低限の外部ライブラリを自前でインストール(ライブラリによってはコンパイルも必要)しなければなりません。
このエントリでは2009年8月現在、Ramaze を使ったアプリケーションをインストール・実行するために必要な準備などを説明します。
# 以前のエントリはデータが消えたため、改めてまとめました。

今回利用するライブラリは以下の通り。

  • rubygems 1.3.5
  • rack 1.0.0
  • Ramaze 2009.07 + Innate 2009.07
  • Sequel 3.3.0 + amalgalie 0.10.2

当然ながら、シェルにログインする必要があるので、スタンダードプラン以上でなければなりませn。

(以下、詳細)

1: rubygems のインストール

まずは必須条件の rubygems のインストール。
これに関しては以下のサイトのエントリに詳細が書かれています。

2: rack のインストールとパッチ当て

次に Ramaze の必須ライブラリである rack のインストールです。
インストールそのものは定型句「gem install -r rack」で済みますが、バージョン 1.0.0 現在、ソースの一部にパッチを当てないとエラーが出て正しく動作できません。
Railsでも2.3以降で標準採用されたそうなので、そちらにも関係があります。

rack インストール後、「(gemインストール先)/gems/rack-1.0.0/lib/rack/request.rb」の150行目付近を以下のソースの青字のように修正します。

     @env["rack.request.form_vars"] = form_vars
     @env["rack.request.form_hash"] = Utils.parse_nested_query(form_vars)

     # @env["rack.input"].rewind ← # 元の行
     begin
      @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
     rescue Errno::ESPIPE; end
    end
    @env["rack.request.form_hash"]

元ネタは以下のサイト他多数

3: Ramaze ほかのインストール

上記の通りにインストールしていれば、素直に「gem install -r ramaze」でインストールできます。
amalgalite のようにネイティブコードを使用する拡張ライブラリも、きちんと環境変数が設定されていればエラー無くインストール可能です。
# 以前の rubygems だとコンパイル後のコピー処理で権限エラーが出て、手動でコンパイルおよび適切な位置にコピーする必要があった

続きは明日にでも。

本日のリンク元
アンテナ
その他のリンク元
検索