InstantRailsは以前簡単に使ったことがあったけれど、ネットワークに接続されていないスタンドアロンPCで、きちんとドメインを割り当ててあたかもネットワーク上にあるかのようにアプリケーションを動かす設定にまではやっていなかった。
今日デモをやろうと思ってLinuxからInstantRailsへ簡単に移行してみたので、その時のメモを残しておく。

作りたい環境:

スタンドアロンPC1台の中に、以下の2つのURLでそれぞれアクセスできるRailsで作られたサイトを立ち上げるところまでです。
  • http://example-1.com/
  • http://example-2.net/

1. InstantRailsをインストールする

InstantRails で 簡単 Ruby on Rails 体験」の辺りを参考に、ひとまずお使いのWindowsマシンへインストールをしてみてください。
これで、Apache+Rails+MySQLなWebアプリをやる上でフルスタックの環境がインストールされます。

2. hostsを書き換える

ご存知の方はエクスプローラで直接開いても良いと思いますが、ご存知ない方はタスクトレイにあるInstantRailsのアイコンを右クリックし、Configure -> Window's Hosts fileというメニュー項目を選択してください。
そして開かれたファイルの末尾に以下の2行を追記します。
127.0.0.1  example-1.com
127.0.0.1  example-2.net
これでブラウザを含め、DNSに依存するアプリケーションはどちらのドメインも自分自身のPCにあるものとして認識するようになります。
IP 127.0.0.1はlocalhostを指し示しています。

3. apache(httpd.conf)を書き換える

InstantRailsをインストールした後のスタンドアロンPCには、apacheが起動しています。
これはWebサーバで、ブラウザが接続しにくるものです。
ただし、単一の127.0.0.1というIPでapacheが立ち上がっているだけなので、ブラウザから接続されただけですとそれ自体が、example-1.comとして機能すべきなのか、example-2.netとして機能すべきなのかは判定できません。
そこで、HTTP/1.1以降をサポートするブラウザは大抵HostというHTTPヘッダに、ドメイン名を付与するようになっています。
apacheはその値を見るようになっており、内部で設定を使い分けます。

これがVirtualHostと呼ばれるものです。
一つのapacheで複数のドメインを使い分け、あたかも複数種類のドメインをカバーしているかのように振舞わせることができます。

InstantRailsのアイコンを右クリックし、Configure -> apacheというメニュー項目を選択してください。
そして開かれたファイルの末尾に以下を追記します。
<VirtualHost *>
    ServerName example-1.com
    RewriteEngine On
    RewriteRule ^/(.*) http://localhost:3010/$1 [QSA,P,L]
    ProxyPassReverse / http://localhost:3010
</VirtualHost>
<VirtualHost *>
    ServerName example-2.net
    RewriteEngine On
    RewriteRule ^/(.*) http://localhost:3011/$1 [QSA,P,L]
    ProxyPassReverse / http://localhost:3011
</VirtualHost>
これで、apacheは指定されたドメインごとに、localhostの異なるポート番号へリクエストをプロキシするようになります。

4. Railsアプリケーションを起動する


またしてもInstantRailsのアイコンを右クリックし、Rails Applications -> Manage Rails Applicationsというメニュー項目を選択してください。
すると新たにウインドウが開きます。
ディフォルトではcookbookとtypo-2.6.0が入っています。
起動したいアプリケーションにチェックボックスを付けて、Start with Mongrelボタンを押せば、Railsアプリケーションは起動します。
Rails Applicationは、それぞれ1つのサーバを起動しますので、複数チェックすればその数だけサーバが起動してしまいます。

サーバは同じポート番号で2つ起動することができません。
そこで、チェックを入れたRailsアプリケーションごとに、異なるポート番号を指定する必要があります。
ちなみに、apacheにはexample-1.comは、3010番ポートへ、example-2.netは、3011番ポートへ割り振るよう設定しましたので、Railsアプリケーションをそのポート番号にあわせてやります。

cookbookにのみチェックを入れて、Configure Startup Modeボタンを押します。
Portという欄があるので、3010と入力し、OKボタンを押します。

次に、typo-2.6.0にのみチェックを入れて、Configure Startup Modeボタンを押します。
Portには3011と入力し、OKボタンを押します。

そして、いよいよ起動です。
cookbookとtypo-2.6.0の両方にチェックを入れてStart with Mongrelボタンを押してみてください。
うまく行くと、2つのコマンドプロンプトウインドウが出て、それぞれに以下のような出力が現れます。
** Starting Mongrel listening at 0.0.0.0:3010
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  INT => stop (no restart).
** Mongrel available at 0.0.0.0:3010
** Use CTRL-C to stop.

5. アクセスして確認してみる。

http://example-1.com にアクセスすると、Cookbookらしき画面が出ます。
http://example-2.net にアクセスすると、Signupと書かれたフォーム画面が出るはずです。