Как RVM работает на производстве, когда в систему не вошли пользователи? - PullRequest
8 голосов
/ 06 мая 2011

Рассматривая запуск RVM в производство (легкий режим) на новой машине.Но я не представляю, как это будет работать, если пользователь не вошел в систему. RVM установлен в /usr/local/rvm/bin/rvm, поэтому он доступен для всех.

Если сервер перезагружается и находится на экране входа в системуи фоновые демоны обслуживают apache / rails и т. д., а .bashrc и т. д. не загружаются ... как / где мы указываем, какой из RVM-Ruby загружать?

Возможно, где-нибудь в Пассажире Phusion?

, кто управляет этими наборами драгоценных камней?они поделились?

Ответы [ 4 ]

13 голосов
/ 08 мая 2011

Вы можете использовать команду RVM wrapper для создания сценариев, которые загружают правильную среду RVM перед выполнением необходимых двоичных файлов.Формат:

rvm wrapper [ruby_string] [wrapper_prefix] [binary[ binary[ ...]]]

Например, чтобы создать двоичный файл с именем system_unicorn, который загружает ruby-1.9.2-p180, а затем выполняет unicorn, используйте следующее:

rvm wrapper ruby-1.9.2-p180 system unicorn

Youможет передавать несколько двоичных файлов для создания оболочек.Например, чтобы создать оболочки для unicorn и god, запустите

rvm wrapper ruby-1.9.2-p180 system unicorn god

ruby_string, это может быть что угодно, что вы можете передать rvm use, и, таким образом, также может содержать наборы гемов;например, чтобы создать myapp_unicorn для набора гемов my_app_gemset, используйте:

rvm wrapper ruby-1.9.2-p180@my_app_gemset myapp unicorn

Когда вы устанавливаете Passenger в эти дни, он автоматически создает оболочку для ruby (уверен, что он вызывает ее passenger_ruby), которая загружает правильную версию Ruby (ту, которую вы используете при установке).Вы можете использовать config/setup_load_paths.rb для указания набора камней - см. этот ответ переполнения стека .

0 голосов
/ 08 мая 2011

1) root устанавливает версии ruby ​​и гемы под RVM, если вы устанавливаете их глобально (прочтите readme RVM - кажется, что возможны проблемы при глобальной установке!)

2) если вы работаете в UNIX, каждый из ваших системных процессов запускается как отдельный пользователь, например в LINUX через init-скрипты в /etc/init.d/ ... пока процессы созданный в качестве конкретного пользователя, сопоставление имен пользователей с UID / GID, домашний каталог, и login-shell ищутся в файле / etc / passwd - вот где оболочка входа (например, bash) определена для конкретного пользователя.

Итак, возвращаясь к вашему заявлению:

If server restarts and is at login screen and background daemons are serving apache/rails, etc. 
and no .bashrc, etc. have loaded...how/where do we specify which of RVM's Rubies to load?

Вы видите проблему с этим утверждением?

Когда сервер запускается и запускаются фоновые процессы, каждый из них запускается как отдельный пользователь, с определенной оболочкой входа в систему и с определенным домашним каталогом.

RVM понадобится, чтобы у вас была установлена ​​оболочка входа в систему / bin / bash - в противном случае она не смогла бы настроить среду RVM для любого из процессов, выполняемых этим конкретным пользователем. например RVM не будет работать, если вы используете / bin / nologin в качестве оболочки по умолчанию.

задачи1: Это проблема безопасности, конечно! В общем случае для защиты демонов не следует устанавливать оболочку.

задачи2: Вы не хотите, чтобы высокопроизводительные инструменты были доступны кому-то, взломавшему ваш сервер - вот почему у вас не должно быть cc и других инструментов на рабочем сервере - вот почему вы не должны компилировать ваши Rubys и Gems на рабочем сервере, а лучше скопировать каталог .rvm на рабочие серверы ...

Проблема 3: (более общий) То, как RVM управляет всеми версиями Ruby и Gem, - очень очень хитрый подход к управлению версиями. Использование специальных функций одной конкретной оболочки входа для облегчения управления версиями не очень хорошая идея - конечно, в данный момент нет ничего лучше, но в прежние времена идея, лежащая в основе Lude, была гораздо лучшим подходом для установки различных версий программного обеспечения. : http://www.iro.umontreal.ca/contrib/lude/lude2_toc.html

Вывод:

Итак, как я упоминал в предыдущем посте, я настоятельно рекомендую настроить RVM для учетной записи обычного пользователя, чтобы запускать процессы Ruby и Rails и настроить эту одну учетную запись с / bin / bash в качестве оболочки входа в систему и скопировать вашу Каталог .rvm с вашего dev-сервера на ваши рабочие машины через scp или rsync - это лучший и более безопасный подход.

0 голосов
/ 08 мая 2011

У меня была похожая проблема, когда я хочу развернуть версию ruby ​​и все связанные с ней гемы на производственных машинах ...

По причинам, изложенным в моем другом посте, я выбрал локальную установку RVM. У меня есть пользователь, «развернутый» как на моих dev-серверах, так и на производственных серверах.

Я бы настоятельно рекомендовал использовать «rsync» или «scp -rp» для копирования полного подкаталога ~ / .rvm на целевую машину (помните, что вы не хотите, чтобы cc и другие инструменты работали в рабочей среде). сервер!)

Одно важное замечание:

убедитесь, что вы используете учетную запись с одинаковым именем на всех компьютерах, если реплицируете каталог .rvm!

Я заметил, что внутренняя бухгалтерия RVM отслеживает некоторые переменные среды во время установки версий и гемов Ruby, и что он отслеживает, в частности, имя используемой учетной записи пользователя и путь к домашний каталог пользователей. Бьет меня, почему они не используют $ HOME и $ USER, которые являются стандартными для всех UNIX ... мне кажется настоящей ошибкой в ​​RVM.

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

например. Я использую пользователя "deploy", у которого есть каталог .rvm и которому принадлежат запущенные процессы.

UPDATE

если вы используете rsync или scp для синхронизации своей учетной записи развертывания, недостатком является то, что вам необходимо перезагрузить серверы, например, Единорог, вручную.

Еще один многообещающий способ развертывания приложений RVM и Rails - это развертывание на одном компьютере, на котором выполняется обновление пакета, а затем создание RPM из всей учетной записи развертывания, которая затем устанавливается через rpm -Uhv или частный репозиторий yum. на все узлы. Преимущество заключается в том, что службы на узлах можно легко перезапустить с помощью действия% post в RPM.

0 голосов
/ 06 мая 2011

Я имел дело с этим в прошлом, выполняя все задания с пользователем, у которого настроен rvm.Это усложняет многие простые задания, потому что вы должны убедиться, что rvm загружен.Если вам нужно запускать команды от имени пользователя root и использовать rvm, вы можете использовать команду rvmsudo.

Вы также можете установить RVM для всей системы от имени root:

...