RVM и тонкий, root против локального пользователя - PullRequest
26 голосов
/ 12 июля 2010

Так что я пытаюсь похудеть, чтобы работать как служба с RVM.После thin install я вручную обновил /etc/init.d/thin, чтобы использовать su - user при запуске команды config, чтобы thin работал как локальный пользователь, а не как root.Пока все хорошо.

Теперь, когда я пытаюсь sudo service thin start, похоже, что он пытается использовать не-RVM версию Ruby (1.8.7, которая была установлена ​​на коробке с самого начала), чтобы фактическивыполнить команду.Я сделал gem install thin для не-RVM-версии, и тогда я получил сообщение uninitialized constant Bundler - Bundler устанавливается только в гемах RVM, а не в системных гемах.Похоже, я не могу настроить среду RVM (хотя мой сценарий запуска RVM находится в ~ / .bashrc, который затем включается в ~ / .bash_profile).

Все, что я хочу сделать, это запуститьтонкий как сервис, использующий среду RVM, а не системную среду.Это вообще возможно?Должен ли я просто сдаться и совершить главный грех - запустить все как root?Это очень заманчиво на данный момент.

Спасибо за любую помощь!

Ответы [ 4 ]

84 голосов
/ 31 июля 2010

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>
22 голосов
/ 19 мая 2011

Одно дополнение, которое, мы надеемся, сэкономит время: Ubuntu может делать забавные вещи с переменными sudo и environment. Если обычный sudo не работает, используйте rvmsudo (в .rvm / bin):

rvmsudo thin install

rvmsudo update-rc.d -f thin defaults
5 голосов
/ 13 апреля 2011

Хорошей практикой может быть запуск приложения в тонком состоянии, чтобы можно было запускать приложения в различных средах, таких как одно приложение в ruby ​​1.8.7 myapp1.8.7 и другое приложение в ruby ​​1.9.2 myapp1.9.2

sudo nano /etc/init.d/myapp1.8.7

СОХРАНИТЕ оригинальный загрузчик

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin

В начальном случае поместите

$DAEMON -C /etc/thin/$NAME.yml start

и запустите его

sudo service myapp1.8.7 start

Делает то же самоес приложением myapp1.9.2, и вы сможете запускать множество приложений независимо в смешанных средах.

sudo service myapp1.9.2 start
0 голосов
/ 25 февраля 2014

для автономной установки - простое решение, я добавил привилегии пользователя root для «требований rvm» и затем удалил привилегии, используя visudo username ALL = (ALL: ALL) ALL

https://www.digitalocean.com/community/articles/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps

Вероятно, тогда у вас будут проблемы с доступом для чтения / записи к / usr / local / rvm

Я изменил разрешения, чтобы все пользователи могли читать / писать / выполнять;

как root 'chomod a + xwr / usr / local / rvm /'

При обновлении GEMS

вы получите предупреждения от RVM обо всех пользователях, имеющих права на чтение / запись / выполнение этой папки.
...