如何从 Debian 上的 shell 脚本启动 Rails?

如何从 Debian 上的 shell 脚本启动 Rails?

目前我并不需要处理 Passenger 或 Capistrano。我只想在启动时在端口 3000 上运行 Rails。我尝试复制本教程适用于 node尽我所能运行轨道:

我有一个railsup脚本,/etc/init.d/内容如下:

#!/bin/sh
export PATH=$PATH:/usr/local/bin

case "$1" in
  start)
   cd /root/rails_app; /usr/local/rvm/gems/ruby-2.0.0-p247/bin/rails server -d -p 3005
  ;;
  # starting other stuff
*)

我还将其包含在update-rc.d

我让它工作了,但只有我手动运行脚本时它才有效——它似乎无法在启动时运行。为什么../bin/rails它在启动时不可用?

我猜想 ruby​​ path \ rvm \ rails 中肯定存在一些我不知道的东西?有没有办法使用 crontab 的 @reboot 来实现这一点?

答案1

使用init.d

借助新的 System-V 并行化系统,您可以添加初始化信息脚本顶部的部分。

查看/etc/init.d/README并尝试将其添加到脚本顶部:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          rails
# Required-Start:    $local_fs $remote_fs
# Required-Stop:
# X-Start-Before:    rmnologin
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Start Rails on port 3000
### END INIT INFO

使用cron(并以您自己的用户身份运行)

你可以运行你的守护进程每次重新启动时使用特定cron语法:

crontab -l |
   sed '$a@reboot /usr/bin/rail-or-other-bin -arg1 -arg2 -port 3000' |
   crontab

警告运行此命令(crontab不带参数,使用管道的标准输入)将改变你的crontab!看man crontab

... 尝试一下没有最后一个crontabbefore 的情况:

crontab -l |
   sed '$a@reboot /usr/bin/rail-or-other-bin -arg1 -arg2 -port 3000'

这样做的好处是守护进程在用户空间运行,并且运行错误将通过正常的 cron 方式作为邮件发送给您。

答案2

脚本是否正在运行?我会尝试添加:

echo RAILSUP >/tmp/railsup.log

如果确实如此,您是否检查过日志以查看尝试在启动时运行时出现什么错误?就我个人而言,我会在 strace 下运行它并将所有操作记录到一个文件中,以便在您可以登录时检查。它可能会提供一些线索。

答案3

确实如此,您是否检查过日志以查看尝试在启动时运行时出现什么错误?就我个人而言,我会在 strace 下运行它并将所有操作记录到一个文件中,以便在您可以登录时检查。它可能会提供一些线索。

相关内容