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 腳本/監視器等進行控制?
您可以創建 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