ユーザ用ツール

サイト用ツール


prog_cgi:動的コンポーネントと静的コンポーネント

文書の過去の版を表示しています。


動的コンポーネントと静的コンポーネント

ウェブアプリで表示されるコンテンツでは、プログラムを使って生成される動的コンポーネント(部分)と、CSSファイルやアイコン画像のように、内容が変化せず、プログラムを介さない静的コンポーネントがあります。

ここで問題になるのは、ポータブルなアプリケーションを設計しようとした場合、URLに含まれるパスをどのようにするかということです。 例えば動的コンテンツでは、以下のようなURLでアクセスする場合があります。

http://example.com/cgi-bin/index.rb

このサーバでは、cgi-bin以下でCGIを動作させる仕様だったため、cgi-binにエントリポイント index.rb を設置して動作させています。ここで生成されるページでアイコンを使いたい場合、以下のようなタグを生成するでしょう。

<img src="img/icon1.png">

ところがこのような記述があると、ブラウザは、/cgi-bin/img/icon1.png からアイコンを読み込もうとしてしまい、意図通りにはどうさしません。それでは、絶対パスで指定するのはどうでしょうか。

<img src="/img/icon1.png">

今度は良さそうですね。ブラウザがアイコンを読み込むときに使うURLも意図通りに見えます。

http://example.com/img/icon1.png

通常の機器ならば、それを一つのアプリケーションで専有できるので、この方法で十分です。 ところが、アプリケーションをポータブルにしたい場合は、問題が発生します。

このアプリケーションを、サブディレクトリ /app1/ 以下で動作させたくなった場合はどうでしょうか。エントリポイントのURLはそこに移動することになるでしょう。

http://example.com/app1/index.rb

しかし、生成されるコンテンツ中では同じように絶対パスで動作するため、この場合も、/img から読み込もうとしてしまい、/app1/img からは読み込んでくれません。

Aloneのテンプレートでは、この問題に対処するための方法が用意してあります。

まず、al_config.rb に静的コンテンツのパスを設定します。

AL_URI_STATIC = "/app1"

htmlテンプレート中では、以下の通り記述します。

<img src="<%=s "icon1.png" %>">

その結果、以下のimgタグが生成されます。

<img src="/app1/icon1.png">

これで、app1を明日my-app1にしたくなっても、AL_URI_STATICを変更するだけでOKになります。

prog_cgi/動的コンポーネントと静的コンポーネント.1551837638.txt.gz · 最終更新: 2019/03/06 11:00 by hirohito