【问题标题】:Manage sidekiq with init.d script using RVM使用 RVM 使用 init.d 脚本管理 sidekiq
【发布时间】:2013-08-03 23:07:07
【问题描述】:

我正在使用提供的 init.d 脚本(init.d script from the sidekiq github repo),但我在一个安装了 RVM 的 ubuntu 系统上。

我似乎无法弄清楚如何 cd 进入我的应用程序目录并发出命令,而不会在日志中出现一些抱怨并且实际上什么都没有启动。

问题:当我使用 RVM 时,sidekiq 的启动命令在我的 init.d 脚本中应该是什么样的?我的用户名为 ubuntu。目前我的 init.d 脚本中有这个:

START_CMD="$BUNDLE exec $SIDEKIQ" 
# where bundle is /usr/local/rvm/gems/ruby-1.9.3-p385/bin/bundle
# and sidekiq is sidekiq
# I've also tried with the following args: -e $APP_ENV -P $PID_FILE -C $APP_CONFIG/sidekiq.yml -d -L $LOG_FILE"
RETVAL=0


start() {

  status
  if [ $? -eq 1 ]; then

[ `id -u` == '0' ] || (echo "$SIDEKIQ runs as root only .."; exit 5)
[ -d $APP_DIR ] || (echo "$APP_DIR not found!.. Exiting"; exit 6)
cd $APP_DIR
echo "Starting $SIDEKIQ message processor .. "
echo "in dir `pwd`"
su - ubuntu -c "$START_CMD >> $LOG_FILE 2>&1 &"
RETVAL=$?
#Sleeping for 8 seconds for process to be precisely visible in process table - See status ()
sleep 8
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
  else
    echo "$SIDEKIQ message processor is already running .. "
  fi


}

我的 sidekiq.log 给了我这个错误:Could not locate Gemfile。但是,我打印了工作目录,并且根据 echo pwd,在执行此命令时,我绝对是在我的应用程序的当前目录中。

当我取出 su - ubuntu -c [这里的命令] 时,我得到这个错误:

/usr/bin/env: ruby_noexec_wrapper: No such file or directory

我的解决方案是手动启动该过程。当我手动 cd 进入我的应用程序目录并发出以下命令时:

bundle exec sidekiq -d -L log/sidekiq.log -P tmp/pids/sidekiq.pid

事情按计划进行,然后

sudo /etc/init.d/sidekiq status

告诉我事情已经启动并正在运行。

另外,sudo /etc/init.d/sidekiq stop 和 status 按预期工作。

【问题讨论】:

    标签: ruby-on-rails ubuntu rvm sidekiq


    【解决方案1】:

    几个月前我写了一篇博文,讲述了我为 Sidekiq 编写 init.d 脚本的经验,但是我使用的是 rbenv 而不是 RVM。

    https://cdyer.co.uk/blog/init-script-for-sidekiq-with-rbenv/

    我认为除了修改用户名和应用程序目录变量之外,您应该能够使用几乎相同的东西。

    【讨论】:

      【解决方案2】:

      使用包装器:

      BUNDLER=/usr/local/rvm/wrappers/ruby-1.9.3-p385/bundle
      

      如果捆绑器包装器不可用,请使用以下命令生成它:

      rvm wrapper ruby-1.9.3-p385 --no-links bundle # OR:
      rvm wrapper ruby-1.9.3-p385 --no-links --all
      

      您可以使用别名来简化:

      rvm alias create my_app 1.9.3-p385
      

      然后像这样使用它:

      BUNDLER=/usr/local/rvm/wrappers/my_app/bundle
      

      这样,当应用程序 ruby​​ 更改时,您不必更改脚本 - 只需更新别名,rvm-capistrano 中有很好的描述/集成 => https://github.com/wayneeseguin/rvm-capistrano/#create-application-alias-and-wrappers

      【讨论】:

      • 在 /usr/local/rvm/wrappers/ruby-1.9.3-p385 目录中,没有 bundle 命令。 which bundle 给了我 /usr/local/rvm/gems/ruby-1.9.3-p385/bin/bundle。另外,我需要 su - ubuntu -c [command] 代码吗?
      • 还添加了指令以在不可用时生成包装器
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      相关资源
      最近更新 更多