酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

開発サーバをThinからPowに切り替えて開発効率アップ! (Mac限定)

Eye Catch Image

「小さなチーム、大きな仕事」でおなじみの 37 signailsが開発した「設定が不要なRails & Rackサーバ Pow」を使いはじめました! このPowを使うメリットは、

* コマンド一つでPowサーバにRailsアプリへのリンクを作れる
* LAN内にあるスマホ/タブレットから開発中のURLにアクセスできる

ちなみにこちらはMac限定です。


Pow インストール

Powのインストールは以下のコマンドのみ。もし、万一エラーが出るようなら37signals/pow GitHubを確認してみてください。

コンソール
1
curl get.pow.cx | sh

Powderのインストール

Powのコマンド入力支援してくれるPowderをインストール。

コンソール
1
gem install powder

Powへのリンクの作成

Rails/Rackアプリのフォルダで以下を入力するとpowへのリンクを作成できます。

コンソール
1
2
powder link
> Your application is now available at http://app_folder_name.dev/

ブラウザでhttp://app_folder_name.dev/にアクセスするか、powder openと入力するとアプリが表示されます。その他のpowderのコマンドについては、下にまとめています。

LAN内のスマホ/タブレットからアプリにアクセス

pow + xip.ioによって、LAN内のスマホ/タブレットからアプリに簡単にアクセスすることができます。 まず、Mac側のローカルIPを確認。

コンソール
1
2
3
4
ifconfig
...
        inet 192.168.24.99
...

次にスマホ/タブレットのブラウザから、http://app_folder_name.192.168.24.99.xip.io/にアクセスするとアプリを表示することができます。

fpu_tmp_1354787673.3801_44e45e

Guard::Powのインストール

Railsには、config/environment.rbなど再起動しないと反映されないファイルが幾つかあります。 これをGem Guardで監視して変更があった場合には、自動でPowが再起動されるようにします。

コンソール
1
gem install guard-pow

Guardファイルの設定

Guardはファイル変更を監視して、サーバの再起動やテストの実行などを行なってくれるGemです。詳細は「RSpec/Spork/Guard/Growl/Rails 3.2.9で作る - プリチーなTDD環境!」をご覧ください。

ここからはGuardとの連携方法について説明します。

まず、Guardfileを生成/更新します。

コンソール
1
guard init pow

このコマンドを実行すると以下のようにプロジェクト直下のGuardfileが更新されます。

Guardfile
1
2
3
4
5
6
7
8
9
10
11
guard 'pow' do
  watch('.powrc')
  watch('.powenv')
  watch('.rvmrc')
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('config/application.rb')
  watch('config/environment.rb')
  watch(%r{^config/environments/.*\.rb$})
  watch(%r{^config/initializers/.*\.rb$})
end

これでGuardがファイルを監視して、変更があった場合には Powを自動で更新してくれます。

補足: localhostでアクセスするリンク先の設定

localhostでアクセスするリンク先は以下のコマンドで設定できます。

1
ln -s /app/path/to/ ~/.pow/default

補足: Pow-RVMの連携 Rubyのバージョンを指定する

もし、Powでリンクを張ったプロジェクトのRVMのバージョンを指定したい場合は、まずプロジェクトの直下に.rvmrcを作成して以下を登録。

1
rvm 1.9.3

次に同じくプロジェクトの直下に.powrcを作成して以下を追加。

1
2
3
4
if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ]; then
  source "$rvm_path/scripts/rvm"
  source ".rvmrc"
fi

RVM関連の設定詳細は公式ページの2.3.2 Specifying Ruby Versions with RVMを参照。

補足: Powを使っていて Error starting application(Error: Response was not received)が発生する場合

Mac/homebrew/Powの環境で、Error starting application(Error: Response was not received)がある一定の確率で出る場合は、Nokogiriのインストール方法に問題がある可能性があります。

Nokogiriを削除して、Nokogiri公式のインストール方法で再イントールしてください。

参考ソース(タイトルからはわかりにくいですがPowについてのトラブルっぽいです): nginx - Rails (local) server shutdown problem - Stack Overflow

補足: Powderのコマンド一覧

使いそうなコマンドをピックアップしました。詳細はRodreegez / powder | GitHubにあります。

powder link

=> current_dirのシンボリックリンクを作成
powder link [bacon]

=> ファイル名指定のシンボリックリンクを作成
powder remove

=> シンボリックリンクを削除
powder open

=> ブラウザでcurrent_dirのアプリを表示
powder list

=> ~/.powのシンボリックリンク一覧を出す
powder applog

=> アプリのログを tail -f で出力
powder restart

=> サーバ Pow の再起動
powder cleanup

=> アクセス出来ないアプリへのリンクを削除
powder update

=> Pow のアップデート

補足: Powのアンインストール

もし何らかの事情でPowをアンインストールしたくなった場合は以下のコマンドを実行。

1
curl get.pow.cx/uninstall.sh | sh

アンインストールの詳細は公式ページの1.2 Uninstalling Powを参照。

関連記事

Rails 3.2.9/Bootstrap/Haml プロジェクト新規作成 最短ガイドだよ! にてGuardの設定/ブラウザのオートリロードの方法などを載せています。

Special Thanks

変更来歴

12/06 pow + xip.ioの説明を追加。コマンド一覧の位置を変更。別途説明を追加。
12/16 11:30 pow + xip.ioのアドレスがまちがっていたので修正
12/18 19:00 補足: Powを使っていて Error starting application(Error: Response was not received)が発生する場合を追加
12/18 20:40 補足: Powのアンインストールを追加
12/18 20:45 補足: Pow-RVMの連携 Rubyのバージョンを指定するを追加
01/15 20:50 補足: localhostでアクセスするリンク先の設定を追加

テスト環境

テスト環境は以下の通りです。

OS : Mac Lion(OS X 10.7)
Ruby : 1.9.3
Rails : 3.2.9
haml : 3.1.7
coffee-script : 3.2.1
Rspec : 2.12.0

おすすめの書籍