====== ディレクトリ構成とデプロイ ======
標準的には、以下のディレクトリで構成します。配布ファイルを展開すると、ほぼ以下のようになります。
/PATH/TO/ --- al_config.rb -- 共通設定ファイル
+- lib -- Aloneライブラリ
+- controllers -- コントローラ群
+- views -- htmlテンプレート
+- models -- モデル
+- htdocs -- ドキュメントルート、スタティックコンテンツ
+- bin -- 常駐プログラム(AlWorker)等、CGI以外のプログラム
* /PATH/TO/ で示されたベースディレクトリは、次項ウェブサーバの設定により決まります。
* 配布ファイルを展開すると存在するディレクトリ以外は、必要に応じてmkdirします。
===== デプロイ =====
Aloneでは、基本的に配布ファイルを展開するだけで動作するように設計しています。\\
ウェブアプリケーションでは、ブラウザからのリクエストはまずウェブサーバが受け、ウェブサーバがAloneを呼び出すよう動作するため、ウェブサーバの設定を適切に実施する必要があります。
以下の例では、/usr/local/aloneにアプリケーションを作成することとし、Apache httpd 2.4 を使う場合を例に説明します。
ポイントは2点です。
* CGIでRubyプログラムが実行できること。
* ドキュメントルートをどうするか。
==== CGIの実行について ====
alone配布ファイルに、index.rbがあります(htdocs/index.rb)。これが Apache-httpdから最初に実行されるRubyプログラムで、エントリポイントといいます。これから作成するどのアプリケーションの操作も、必ずこのエントリポイントから実行されます。従って、httpdの設定を調整し、このファイルをCGIで実行できるようにしなければなりません。やり方は大別して以下の2パターンです。
==== ケース1 htdocs下でcgiが実行できるように設定 ====
httpd.confを自由に書き換え可能な場合です。
配布ファイルは、標準でこの方針を想定しています。
**手順**
- 配布ファイルを/usr/local/aloneディレクトリに展開します。
- httpdの設定ファイルを以下のように書き換えてrestartします。
DocumentRoot "/usr/local/alone/htdocs"
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
DirectoryIndex index.html index.rb
AddHandler cgi-script .cgi .rb
* DocumentRootをファイルを展開したパスに設定します。
* DocumentRoot下のCGI、index.rb を実行できるように設定します。
**テスト**
ブラウザでindex.rbをアクセスして、CGIが実行されるかテストしてください。
(例) http://example.com/index.rb
Internal Server Errorが出る場合、以下のいくつかの方法でトラブルシュートをします。
* index.rbの1行目を、そのサーバの環境で適切なshebangに書き換えます。(例:#!/usr/local/bin/ruby 等)
* index.rbのコメントアウトされているputs "Content-Type..." 行を有効にして、ブラウザに It works! と表示されるか確認します。
* ウェブサーバのエラーログを確認します。
==== ケース2 cgi実行専用ディレクトリのみcgi実行が可能な場合 ====
apache httpdのデフォルト設定に近い状態です。
**手順**
- 配布ファイルを/usr/local/aloneディレクトリに展開します。
- 配布ファイルのhtdocs以下のファイルを、サーバのDocumentRootへコピーします(必須ではありません)
- 配布ファイルのhtdocs/index.rbを、cgi実行ディレクトリへコピーします。
- index.rbを環境にあわせて、1行目のshebang行、およびal_configのパスを書き換えます。
#!/usr/bin/env ruby
# CGIそのものが動作しているか確認するには、以下の行を有功にして確認できる。
# puts "Content-Type: text/plain\r\n\r\nIt works!"
require '/usr/local/alone/al_config'
require 'al_controller'
**テスト**
ブラウザでindex.rbをアクセスして、CGIが実行されるかテストしてください。
(例) http://example.com/cgi-bin/index.rb