Должен ли я установить RVM как многопользовательский? - PullRequest
1 голос
/ 27 мая 2011

Я нарисовал себя немного раздражающим уголком.

Я начал использовать RVM, и одно из моих приложений теперь счастливо расположено в собственном наборе Ruby 1.8.7@appname. Я могу сделать гемсет с нуля и сделать bundle install, чтобы установить все драгоценные камни. Все хорошо.

Итак, на сервере, где размещено приложение, в nginx with passenger я установил RVM под пользователем «deploy», которому принадлежит папка приложения. Затем я установил все драгоценные камни с комплектом установки. Затем я изменил конфигурацию nginx, чтобы она указала на новую версию приложения, которая работает под RVM. БАМ! Пассажир начинает жаловаться на отсутствие драгоценных камней.

Я думаю, что проблема в том, что nginx запускается от имени пользователя root, для которого не определен RVM. «Нет проблем», - подумал я. Я установлю RVM приложения в качестве системной настройки по умолчанию. Итак, я переключился на root, затем сделал rvm --default 1.8.7@appname. Я получил:

rvm: command not found

назад, похоже, RVM был установлен только для пользователя "deploy". Думаю, мне следовало установить его для всех пользователей, следуя установочному документу RVM .

Нужно ли начинать заново с нуля? Т.е. мне следует переключиться обратно на пользователя «развертывания», удалить RVM и все его следы, а затем переустановить его как root? Или я могу запустить nginx / passenger на нужном RVM?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

По умолчанию Passenger запускает приложение Rails под тем же UID, что и владелец файла config/environment.rb, так что вы можете оставить свое приложение под deploy user. См. Раздел Переключение пользователя в документации для пассажиров.

Кроме того, очень важно установить переменную passenger_ruby в ngnix config так, чтобы она указывала на двоичный файл RVM ruby, например:

passenger_ruby /home/deploy/.rvm/bin/passenger_ruby;

Подробнее см. Документация по интеграции RVM Passenger .

2 голосов
/ 27 мая 2011

Предисловие: Я не являюсь текущим пассажиром. Поэтому следующие вещи - это только мысли и воспоминания.

Во-первых: Если я правильно помню, то только основной процесс nginx определенно запускается от имени root, но дочерние процессы запускаются под идентификатором пользователя / группы, который вы можете настроить в конфигурации nginx. (И вы должны сделать это, если вы заботитесь о безопасности!)

Не знаю, повлияет ли это на пассажирский мод - скажем, так и должно быть, потому что основной процесс заключается только в расширении рабочих процессов, которые будут выполнять реальную работу. Также не могу сказать, работает ли вспомогательный процесс для пассажира с теми же правами пользователя, что и рабочий. (Следует по той же причине, что и в первом абзаце.)

Существует настройка passenger_default_user, которую вы должны использовать в nginx. Это должно избежать проблем вашего пользователя.

Во-вторых попробуйте советы под https://rvm.beginrescueend.com/integration/passenger/

Они могут быть полезны, особенно в случае установки пользователем RVM.

Пожалуйста, прочитайте детали Примечания , Устранение неисправностей и Часто задаваемые вопросы внимательно!

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

И последнее, но не менее важное: В прошлом у меня не было такого хорошего опыта с настройкой RVM-passenger-nginx. Кроме того, я не дружу с перегруженными веб-серверами / балансировщиками нагрузки и поэтому никогда больше не буду использовать пассажирский модуль nginx. Храните вещи, которые ему не принадлежат.

Alos помните, что мод passenger-nginx убивает возможность использовать разные версии с рубинами и рубинами с nginx + passenger. Сказал бы, что в этом случае имеет меньше смысла использовать RVM. Я предпочитаю использовать nginx только в качестве прокси и позволять делать работу веб-сервера единорогом / thin / what-else.

Заключение

Я бы сказал, это не проблема с пользователем root. Я думаю, что-то в вашей настройке отсутствует или неправильно настроено.

Чтобы ответить на ваши последние вопросы: Нет, я думаю, что нет необходимости устанавливать систему rvm, и да, должна быть возможность запуска пассажиров в nginx с правильным (пользовательским) rvm.

...