Ubuntu

設置 Thin、Bundler 和 Ubuntu

  • February 8, 2012

我有一個非常簡單的 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 腳本/監視器等進行控制?

您可以創建 binstubs。使用這些初始化腳本應該和其他腳本一樣。如果你沒有在你的 Thin.yaml 中指定它,thin 只需要 –damonize 作為參數。用thin install瘦為你生成一個初始化腳本

捆綁安裝 –BINSTUBS

如果您在 bundle install(1) 中使用 –binstubs 標誌,Bundler 將自動創建一個目錄(預設為 app_root/bin),其中包含捆綁中 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

引用自:https://serverfault.com/questions/357949