Powered by SmartDoc

リソースの扱い

CGIKitアプリケーションで使う画像や設定ファイルなどのリソースは、リソースディレクトリに配置します。リソースディレクトリには通常の リソースディレクトリと Webサーバリソースディレクトリがあり、それぞれCKApplicationクラスのresources属性とweb_server_resources属性で設定します。

通常の リソースと Webサーバリソース

通常のリソースは設定ファイルなどのブラウザに送る必要のないファイル、Webサーバリソースは画像ファイルなどブラウザに直接送るファイルです。リソースディレクトリはどこに配置しても構いませんが、WebサーバリソースディレクトリはWebサーバのドキュメントルート下に配置してください

リソースへのアクセス

リソースへアクセスするにはCKResourceManagerオブジェクトを使います。CKResourceManagerオブジェクトはCKApplication#resource_managerメソッドで取得できます。

CKResourceManagerの主なメソッドはurl()path()です。url()はリソースのURLを、path()は絶対ファイルパスを返します。ただし、url()はWebサーバリソースディレクトリにあるファイルのみが対象となります。通常のリソースディレクトリにあるファイルへのURLは取得できません。

CKResourceManagerのメソッド
メソッド 説明
url(name) WebサーバリソースのURLを返す。通常のリソースを指定した場合はnilを返す。
path(name) リソースの絶対ファイルパスを返す。
bytedata(name) リソースをCKByteDataオブジェクトとして返す。
content_type(path) リソースのContent-Typeを返す。Content-Typeは拡張子から判断する。

例:画像ファイルを表示する

CKImageエレメントを使ってリソースファイルを表示することができます。付属するサンプルアプリケーション ExamplesのImapePageで画像ファイル(cgikit.png)を表示するには、以下の手順で設定します。

<番号リスト-1->resourcesディレクトリを画像の表示できるパスに移動する

  1. CKAppication#web_server_resources属性にresourcesディレクトリのパスを設定する
  2. CKImageのfile属性に画像ファイルのパス(resourcesディレクトリからの相対パス)を設定する

<リストタイトル>resourcesディレクトリを移動する

[localhost:/var/www/cgi-bin/Examples] user% mv resources ../../htdocs

<リストタイトル>resourcesディレクトリのパスを設定する(Example.cgi)

app = CKApplication.new
app.web_server_resources = '../../htdocs/resources'
app.run
FileInResource : CKImage {
  alt  = "File in resource direcory";
  file = "cgikit.png";
}

ここではWebサーバリソースディレクトリから静的コンテンツを表示していますが、CKImageのdata属性を使うことで 動的に画像を生成することも可能です。