ハートレイルズの技術スタッフによるブログです。

ハートレイルズの技術スタッフによるブログです。
ウェブサービス、スマートフォンアプリの制作に関連する技術的な情報を発信していきます。

2014年7月14日月曜日

prax で簡易サーバー

http://pow.cx/ は大変便利なのですが、 Mac 専用です。
その linux 版が prax https://github.com/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 でアクセスできるようになります。