Invoker は、開発環境で複数プロセスを管理するための Ruby 製のツールです。
設定ファイルで指定した複数のプロセスを管理しつつ、
そのプロセスがWEBアプリケーションである場合は、ローカルドメインでアクセスできます。
Foreman と pow に触発されたとのことで、それらの特徴を併せ持ったツールとなっています。
ただ、Pow の代替としては、ちょっと機能が足りなかったり手間だったりするところがあるので、
ローカルドメインでアクセスできるようにした foreman という感じでしょうか。
現時点では Python と Node、Ruby のアプリケーションに対応しているそうです。
以下は紹介ページに記載されている内容を簡単にまとめただけです。
そちらには Pow から移行する場合や rvm, rbenv と一緒に使う場合の注意点などが記載されています。
準備
Ruby 1.9.3 以上が必要です。
$ gem install invoker
設定ファイルを作る
invoker を使って管理したいプロセスを定義するための設定ファイルを作ります。
$ vim invoker.ini
[padrino]
directory = /path/to/app
command = bundle exec padrino s -p 5000
[sidekiq]
directory = /path/to/app
command = bundle exec sidekiq -r ./config/sidekiq.rb
[solr]
directory = /path/to/app
command = bundle exec rake solr:start
設定ファイルを作ったら、次のコマンドでプロセス管理を開始できます。
$ invoker start invoker.ini
Procfile を使う
Procfile
が既に存在しているのであれば、ini
ファイルは不要です。
$ invoker start Procfile
.dev でアクセスできるようにする
Mac OSX のみですが、次のコマンドを実行すると、/etc/resolver/dev
や /Library/LaunchDaemons/com.codemancers.invoker.firewall.plist
といったファイルが作成され、Invoker で起動した http のサービスに
xxx.dev というローカルドメインでアクセスでるようになります。
$ sudo invoker setup
上記で作成されたファイルを削除するには uninstall コマンドを使います。
$ sudo invoker uninstall
上記に加え、ini
ファイル内でアプリケーションの待ち受けポートを $POST
または port というキーで指定すれば準備完了です。
[terminal]
directory = /path/to/ayr-terminal
port = 3000
command = node app
[mezzainine]
directory = /path/to/mezzainine
command = python manage.py runserver $PORT --noreload
[rails]
directory = /path/to/rails
command = bundle exec rails s -p $PORT
起動中のプロセスを管理する
invoker 経由で起動中のプロセスを再起動したりできます。
# Invoker で管理されている実行中のプロセスの一覧を表示します
$ invoker list
# プロセスに SIGINT を送り遅延ジョブの停止を試みます
$ invoker remove dj
# SIGINT で停止できないプロセスに対して任意のシグナルを送信します
$ invoker remove dj -s 9
# プロセスを追加・起動します
$ invoker add dj
# コマンドラベルで指定したプロセスを再起動します
$ invoker reload dj
# コマンドラベルで指定したプロセスを任意のシグナルを使って再起動します
$ invoker reload dj -s 9
Mac OSX では、terminal-notifier という gem をインストールすると、結果が通知されるようになります。
.dev じゃないドメインを使いたい
今のところはムリそうです。
サブドメインを使いたい
今のところはムリそうです。