设置 Thin、Bundler 和 Ubuntu

设置 Thin、Bundler 和 Ubuntu

我有一个非常简单的 Ruby 应用程序,它使用 Thin 和 Bundler,我需要将其粘贴在 Ubuntu 盒子上。

我已经在服务器上安装了 Ruby、bundler 等,但在运行应用程序本身时遇到了问题。

本质上我需要一种通过 Capistrano 启动、停止和重新启动应用程序的好方法。

我的 init.d 脚本看起来很像这样:

DAEMON=/home/ubuntu/apps/my_app/shared/bundle/ruby/1.8/bin/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
        cd /home/ubuntu/apps/my_app/current && bundle exec thin start -d -C /etc/thin/my_app.yml
        ;;
  stop)
        cd /home/ubuntu/apps/my_app/current && bundle exec thin stop -d -C /etc/thin/my_app.yml
        ;;
  restart)
        cd /home/ubuntu/apps/my_app/current && bundle exec thin restart -d -C /etc/thin/my_app.yml
        ;;
  *)
        echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
        exit 3
        ;;
esac

其结果是:

/home/ubuntu/apps/my_app/shared/bundle/ruby/1.8/gems/thin-1.3.1/lib/thin/daemonizing.rb:51:in `daemonize': uninitialized constant Thin::Daemonizable::Daemonize (NameError)

sudo bundle exec thin start从服务器上的应用程序根目录运行就可以了(尽管不是作为守护进程)。

因此,我如何设置此应用程序,以便它作为守护进程启动并可通过 init.d 脚本/monit 等进行控制?

答案1

您可以创建 binstubs。使用这些 init-script 应该像其他脚本一样。如果您未在 Thin.yaml 中指定它,则 Thin 只需要 --damonize 作为参数。使用thin installThin 会为您生成一个 init-script

捆绑安装--BINSTUBS

如果在 bundle install(1) 中使用 --binstubs 标志,Bundler 将自动创建一个目录(默认为 app_root/bin),其中包含 bundle 中 gems 提供的所有可执行文件。

使用 --binstubs 后,bin/rspec spec/my_spec.rb 与 bundle exec rspec spec/my_spec.rb 相同。

http://gembundler.com/man/bundle-exec.1.html

基于这些特点,这对我有用:

bundle install --binstubs
./bin/thin install
/etc/init.d/thin start

相关内容