RVM поставляется с удобным генератором-оболочкой, который создает промежуточный загрузчик для сценария init.d.Это позволяет вам загружать сервис, используя определенную версию Ruby и набор гемов.Я использую его так (после установки тонкого камня):
1 - создать запись init.d для тонкого
sudo thin install
2 - установить некоторые значения по умолчанию
sudo /usr/sbin/update-rc.d -f thin defaults
3 - сгенерировать загрузочную конфигурацию для вашего приложения rails
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
4 - сгенерировать скрипт оболочки rvm
rvm wrapper <rubyversion>@<gemset> bootup thin
5 - Если вы используете глобальный набор гемов, вы можете просто использовать
rvm wrapper ruby-1.9.2-p125 bootup thin
6 - отредактировать thin init
sudo nano /etc/init.d/thin
7 - изменить исходный загрузчик
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
8 - указать вместо него оболочку rvm
DAEMON=/usr/local/bin/bootup_thin
9 - запустите его
sudo service thin start
Если вы запускаете более одного приложения, просто сгенерируйте файл конфигурации загрузки для каждого из них;при загрузке thin разбираются все файлы yml в / etc / thin /.Больше информации здесь:
http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb: Это ссылка на ревизию, последняя версия которой была отредактирована, чтобы быть пустой.Посмотрите на ссылку без ?rev=...
в URL, текущая версия может вернуться и, возможно, более свежая.
HTH
2013 BONUS EDIT
Несмотря на то, что я больше не использую RVM в производственной среде, thin по-прежнему является моим предпочтительным рабочим сервером, и я все еще использую шаги 1-3 выше, чтобы начать работу.Но конфигурация по умолчанию, которую он генерирует, может быть сделана с несколькими изменениями, вот некоторые из моих:
Установите пользователя и группу, которая работает как:
user: www-data
group: www-data
Удалите конфигурацию порта и переключитевместо того, чтобы использовать сокеты (немного быстрее):
# port: 3000
socket: tmp/sockets/<appname>.sock
Скажите худым перезапускать экземпляры один за другим вместо того, чтобы выключать их все перед повторным запуском (повторный запуск):
onebyone: true
Дайте серверу обрабатывать «тег», помогающий идентифицировать их (в ps aux и т. Д.):
tag: <appname>