Pow + Foreman = Invoker

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Invoker は、開発環境で複数プロセスを管理するための Ruby 製のツールです。

Introducting Invoker

設定ファイルで指定した複数のプロセスを管理しつつ、
そのプロセスがWEBアプリケーションである場合は、ローカルドメインでアクセスできます。

Foremanpow に触発されたとのことで、それらの特徴を併せ持ったツールとなっています。
ただ、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 じゃないドメインを使いたい

今のところはムリそうです。

サブドメインを使いたい

今のところはムリそうです。