prax で簡易サーバー

Pow は大変便利なのですが、 Mac 専用です。

その linux 版が prax ysbaddaden/prax です。

何が便利なのか

  • rack アプリケーションを任意のディレクトリに clone したら、~/.prax 以下にシンボリックリンクを張るだけでサーバーの設定がほぼ全部完了 (ゼロコンフィギュレーション!!)
  • rack アプリ毎の rack サーバーの起動終了が全自動
  • touch tmp/restart.txt でアプリを再起動 というような pow の利点を全てそのまま linux 上で享受できます。

prax 本体のインストール方法

README にインストール方法が書いてありますが、2014 年 7 月時点では以下のように unstable を使用するのがお勧めです。(そもそも本番で使うモノではないので躊躇せず行きましょう。)
私は個人的に rvm を使っていますが、アンチの方は適宜読み替えてください。

sudo git clone git://github.com/ysbaddaden/prax.git /opt/prax
cd /opt/prax/
sudo git checkout unstable
rvm use 2.1.1@prax --create --ruby-version
sudo ./bin/prax install
gem install rack
gem install mime-types
prax start -f

最後の -f は foreground です。慣れないうちはこれでログを目視しながら別のターミナルから作業するといいでしょう。だいたい使い慣れてきたら ^C で止めて、 prax start と普通に実行すれば ok です。(rack と mime-types にアクセスできる環境下で実行するよう気を付けてください。mime-types が無くても実行可能ですが、無いと css や js をレスポンスする際に適切な Content-Type がつきません。CSSが適用されない現象が起きたらここを疑ってください。)

アプリの設定

cd
git clone git://example.com/myapp
cd myapp
rvm use 2.1.1@myapp --create --ruby-version
echo RACK_ENV=staging > .env
vi .praxrc
source "/home/kuboon/.rvm/scripts/rvm"
rvm use `cat .ruby-version`@`cat .ruby-gemset`

unstable の機能なのでまだドキュメントされていませんが、.env があれば load_env され、.praxrc があれば source されるので、上のような感じで設定します。(ちなみに master ブランチには .ruby-version を読み込む機能がビルトインされていましたが、rvm アンチな誰かが消したようです。その代わりに .praxrc 対応が入ったのでまあいいじゃないの。)

注意点としては、prax は最小限の環境変数で rack を立ち上げようとするので、source "$rvm_path/scripts/rvm" などと華麗にキメると $rvm_path が空で失敗します。~/.praxconfig に設定するとできるらしいので、興味ある方はソースを追ってください。ほぼ pure ruby です。

次に bundle したり rake db:setup したりして、rails s で立ち上がるところまで持ってきたら、

prax link

とすると ~/.prax/myapp というシンボリックリンクが作成され、 http://myapp.devhttp://myapp.192.168.0.10.xip.io でアクセスできるようになります。

もしサーバーを example.com で公開していて、http://myapp.example.com でアクセスしたい場合には

cd ~/.prax
mv myapp myapp.example

という感じでファイル名を変更するとヒットします。

また、~/.prax/default を作成しておくと該当するアプリケーションがない場合に採用されます。

port forwarding

これも pow の機能ですが、 unstable 版には実装されているようです。~/.prax にシンボリックリンクを作成する代わりに、数値の入ったテキストファイルを作成します。

cd ~/.prax
echo 3000 > myapp2.example

こうしておくと、ポート 3000 で立ち上がっているサービスに http://myapp2.example.com/ でアクセスできるようになります。