SinatraとGrapeAPIで記述されたRackアプリケーションで構成されるubuntuでスタックを実行しています。アプリケーションスタックには、Redis、Postgres、Nginx、Unicornが含まれます。プロセスの監視を処理するために神を使用したいと思います。
現在、デプロイはgitを介してデプロイユーザーの下で行われます。このデプロイメントユーザーは、sudoerではありません。私の質問:誰が神のプロセスを所有すべきですか?そのプロセスをsudoerまたはdeployユーザーとして実行するのが最善ですか?
デプロイユーザーとして実行すると、rbenvが読み込まれ、Unicornを起動できますが、デプロイユーザーにはSudoアクセス権がないため、init.dスクリプトを実行できません。
一方、別のユーザーとして実行している場合、デプロイユーザーは、rbenvによって提供されるbundle execにアクセスできず、Unicornプロセスがダウンした場合に起動できません。
Godプロセスは、upstartスクリプトによって制御する必要があるため、Sudoユーザーとして実行します。これはbinstubsによって可能になります。ビンスタブは、gemによってインストールされる実行可能ファイルのシムです。ビンスタブはバンドラーによって提供されます。これにより、binファイルをシステムのどこからでも実行できます。これを行うには、upstartスクリプトにrbenvパスを追加する必要があります。
export PATH=/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:$PATH
eval "$(rbenv init -)"
export BUNDLE_GEMFILE=$APPLICATION_ROOT/Gemfile
この後、binstubsを直接呼び出すと、バンドルが読み込まれ、正しく実行されます。このパターンでは、upstartを使用してUnicornを実行してresqueすることができます。これにより、upstartスクリプトを呼び出すだけでスタック全体が実行可能になり、upstartとgod構成が簡単になります。 HTH。