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, а не системную среду. Возможно ли это? Должен ли я просто отказаться и совершить окончательный грех за все, как корень? Это очень заманчиво в этот момент.
Спасибо за любую помощь!
Ответы
Ответ 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