Mac OSX システムをサーバーとしてセットアップしようとしています。すべての依存アプリケーションを含めて、起動時に Rails アプリケーションを開始したいと考えています。Passenger/nginx と redis は起動できましたが、sidekiq の起動に問題があります。
具体的には、起動時にこのコマンドを実行したいと思いbundle exec sidekiq -q carrierwave -e production -P /path/to/pid_file
ます。
次の plist ファイルを作成して、/System/Library/LaunchDaemons/ に追加しようとしました。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>my.sidekiq</string>
<key>ProgramArguments</key>
<array>
<string>/Users/username/.rvm/gems/ruby-1.9.3-p194@global/bin/bundle</string>
<string>exec</string>
<string>sidekiq</string>
<string>-q</string>
<string>carrierwave</string>
<string>-e</string>
<string>production</string>
<string>-P</string>
<string>/path/to/sidekiq.pid</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>RAILS_ENV</key>
<string>production</string>
</dict>
<key>WorkingDirectory</key>
<string>/path/to/rails/project</string>
<key>StandardOutPath</key>
<string>/path/to/log/sidekiq.log</string>
<key>StandardErrorPath</key>
<string>/path/to/log/sidekiq_err.log</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
デーモンをロードして起動するために実行sudo launchctl load /System/Library/LaunchDaemons/my.sidekqi.plist
しましたが、システム コンソールにこの launchd の終了コード 127 が表示されます (そして繰り返し再起動を試みます)。
コマンド ラインからプログラム引数を実行すると、「Gemfile not found」というエラーが表示されます (Rails プロジェクト ディレクトリにいないと仮定します)。プロジェクト ディレクトリから実行すると、sidekiq が起動します。私が理解していることから、WorkingDirectoy は、指定されたパス (私の Rails プロジェクト パス) 内で bundle コマンドを実行する必要があります。
この問題は、rails プロジェクト ディレクトリ内でバンドルが実行されていないことが原因であると考えられます。そのため、作業ディレクトリでプロセスを開始するために launchd を取得する必要があります (これは何らかの理由で機能していません)。または、プロジェクト ディレクトリの外で bundle コマンドを実行する必要がありますが、gem ファイルが存在する場所を何らかの形で指示します。
これが問題になる場合は、rvmも使用しています。ルビー 1.9.3、レール 3.2.13、mac osx ライオン。
ありがとう