目前我并不需要处理 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
!
... 尝试一下没有最后一个crontab
before 的情况:
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 下运行它并将所有操作记录到一个文件中,以便在您可以登录时检查。它可能会提供一些线索。