Проблема с развертыванием Ruby + RVM и daemontools - PullRequest
1 голос
/ 17 мая 2011

Я использую daemontools на производстве, чтобы поддерживать работоспособность сервисов, и хочу запустить сервер Ruby, а не Rails, и без RVM он работает хорошо, но с RVM у меня есть некоторые проблемы.

Моя цель - запустить процесс с правами root, заставить его отказаться от прав root, чтобы получить права другого пользователя, а затем запустить процесс Ruby с RVM и указанной версией Ruby.

Вот скрипт запуска, который я использовал до сих пор:

#!/bin/sh
exec 2>&1
cd /app/src
. /usr/local/rvm/scripts/rvm
rvm use 1.9.1-p378
exec setuidgid app_user ruby main.rb

Этот скрипт работает, но у setuidgid есть серьезная проблема: приложение будет запускаться пользователем <x> и группой <x> и только этой группой. Если пользователь входит в другие группы, процесс не будет иметь своих прав.

Так что это привело меня к другому подходу:

#!/bin/sh
exec 2>&1
cd /app
exec sudo -u app_user rvm 1.9.1-p378 exec ruby main.rb

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

1 Ответ

1 голос
/ 18 мая 2011

Я нашел ответ, но, глядя на скрипт rvmsudo, установленный с rvm, вот рабочий скрипт run:

#!/bin/sh
# redirect stderr to stdout
exec 2>&1

cd /app
# load rvm
. /usr/local/rvm/scripts/rvm

# select ruby version for this application
rvm use 1.9.1
# # depending on your configuration you may need to provide the absolute path to rvm, like that:
# /usr/local/bin/rvm use 1.9.1

# build the exec command line preserving the rvm environment
command="exec sudo -u app_user /usr/bin/env PATH='$PATH'"

[[ -n "${GEM_HOME:-}" ]] && command="${command} GEM_HOME='$GEM_HOME' "
[[ -n "${GEM_PATH:-}" ]] && command="${command} GEM_PATH='$GEM_PATH' "

# this is where your real command line goes
command="${command} ruby main.rb"

# run the application
eval "${command}"
...