Подтвердить что ты не робот

RVM и тонкий, корневой и локальный пользователь

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

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

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

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

4b9b3361

Ответ 1

RVM поставляется с удобным генератором обложек, который создает посреднический загрузчик для init.d script. Это позволяет загружать службу, используя определенную версию Ruby и gemset. Я использую его так (после установки тонкой жемчужины):

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 script

rvm wrapper <rubyversion>@<gemset> bootup thin

5 - Если вы используете глобальный гемсет, вы можете просто использовать

rvm wrapper ruby-1.9.2-p125 bootup thin

6 - отредактируйте тонкий 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

Если вы используете более одного приложения, просто создайте файл ymp для конфигурации загрузки для каждого из них; при загрузке всех файлов yml в/etc/thin/анализируются. Подробнее здесь:

http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb: Это ссылка на ревизию, последняя версия была отредактирована как пустая. Рассмотрите возможность просмотра ссылки без ?rev=... в URL-адресе, текущая версия может быть возвращена и потенциально более актуальной.

НТН

2013 BONUS EDIT

Пока я больше не использую RVM в производстве, тонкий по-прежнему мой производственный сервер по выбору, и я все еще использую шаги 1-3 выше, чтобы начать. Но конфигурация по умолчанию, которую он создает, может сделать с несколькими настройками, вот некоторые из моих:

Задайте для пользователя и группы тонкие пробелы как:

user: www-data
group: www-data

Удалите конфигурацию порта и переключитесь на использование сокетов вместо этого (немного быстрее):

# port: 3000
socket: tmp/sockets/<appname>.sock

Скажите тонким, чтобы перезапустить экземпляры один за другим, вместо того, чтобы выключать их все перед запуском снова (перезапуск):

onebyone: true

Дайте серверу обработать "тег", чтобы помочь идентифицировать их (в ps aux и т.д.):

tag: <appname>

Ответ 2

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

rvmsudo thin install

rvmsudo update-rc.d -f thin defaults

Ответ 3

Хорошей практикой может быть то, что приложение в сервисе станет более тонким, чтобы иметь возможность запускать приложения в разных средах, например одно приложение в рубине 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

Ответ 4

для автономной установки простое решение, я добавил права 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/'

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