我正在尝试将 Mac OSX 系统设置为服务器,并希望我的 rails 应用程序在启动时启动,包括所有相关的应用程序。我已经设法让乘客/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
以加载并启动守护程序,但系统控制台显示此启动的退出代码 127(并反复尝试重新启动)。
如果我从命令行运行程序参数,我会收到“找不到 Gemfile”错误(假设我不在 rails 项目目录中)。如果我从项目目录运行,sidekiq 将启动。据我了解,WorkingDirectoy 应该在指定路径(这是我的 rails 项目路径)内执行 bundle 命令。
我认为问题源于未在 rails 项目目录中执行捆绑包。因此,要么我需要启动以在工作目录中启动进程(由于某种原因无法正常工作),要么在项目目录之外执行 bundle 命令,但以某种方式指示它 gem 文件所在的位置。
如果这很重要,我也在使用 rvm。ruby 1.9.3,rails 3.2.13,mac osx lion。
谢谢