#ruby #gem #passenger #rvm #bundler
#ruby #rubygems #passenger #rvm #bundler
Вопрос:
Я переключил приложение ruby (используя Thoth, которое, в свою очередь, использует Ramaze) на работу внутри комбинации rvm ruby@ gemset с помощью bundler. Я могу получить доступ к его консольной версии, поэтому он доволен тем, какие драгоценные камни у него есть. Однако, когда я пытаюсь получить к нему доступ через сервер (через passenger под nginx), я получаю эту ошибку от passenger:
Не удалось найти activesupport-2.3.8 ни в одном из источников (Bundler::GemNotFound)
Я не понимаю этого, поскольку у меня установлена activesupport 2.3.8 в наборе драгоценных камней приложения в rvm. Возможно, passenger не знает о rvm или знает, как использовать правильный rvm? Я не уверен, как passenger подключается к моему приложению и нужно ли ему знать, например, о rvm. Единственная ссылка на passenger, которую я видел, находится в моем блоке конфигурации nginx, где я говорю passenger_enabled on;
У кого-нибудь еще были проблемы подобного рода?
макс
РЕДАКТИРОВАТЬ: еще несколько деталей о моей настройке:
Мое приложение находится в /var/www/apps/akrotoski
Это в rvm / gemset под названием ruby-1.8.7-p302@akrotoski
Мне только что пришло в голову, что это может быть проблема с nginx, запущенным под root. Если я переключусь на root и сделаю echo $PATH
, я получу
/opt/ruby-enterprise-1.8.7-2011.01/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Если я echo $PATH
в rvm моего приложения получаю
/home/deploy/.rvm/gems/ruby-1.8.7-p302@akrotoski/bin:/home/deploy/.rvm/gems/ruby-1.8.7-p302@global/bin:/home/deploy/.rvm/rubies/ruby-1.8.7-p302/bin:/home/deploy/.rvm/bin:/opt/ruby-enterprise-1.8.7-2011.01/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Так, может быть, nginx / passenger запущен таким образом, чтобы не использовать rvm? Как я уже сказал, я совершенно не осведомлен о том, как passenger на самом деле подключается к приложению таким образом.
Комментарии:
1. Как вы запускаете passenger / nginx? Какую команду вы используете и из какого каталога вы ее запускаете?
2. Привет, пан. Я запускаю nginx с
/etc/init.d/nginx restart
. Поскольку у меня включен блок passenger_enabled on; в моей конфигурации nginx для этого приложения, оно должно автоматически его активировать. Я могу перезапустить приложение с поддержкой passenger с помощьюtouch tmp/restart.txt
в корневой папке приложения. Я добавлю еще несколько деталей в свою статью о папках и т.д.3. Вы устанавливали rvm как sudo и для всей системы или только для конкретного пользователя?
4. Только для конкретного пользователя — я предполагаю, что это была моя ошибка? (см. Редактирование OP). Я только что переключился на root и выполнил ‘rvm’, и он не распознал команду. Вам нужно взломать .bashrc, чтобы иметь возможность использовать команду rvm
http://www.christopherirish.com/2010/08/25/how-to-install-rvm-on-ubuntu-10-04/comment-page-1/#comment-103
и я попробовал это в root .bashrc, но это не помогло. Итак, я думаю, я облажался. Как вы думаете, какой наилучший способ исправить это, т. Е. предоставить root-доступ и к rvm? Должен ли я просто установить его снова как root? Вызовет ли это конфликт?
Ответ №1:
Вам нужно установить RVM от имени root, чтобы это была общесистемная установка, и она устанавливалась в / usr/local/rvm:
sudo bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Вы можете прочитать больше здесь об установке. Кроме того, вы захотите убедиться, что ваш rvm по умолчанию является правильным для запуска вашего приложения nginx. Например, вы можете захотеть выполнить следующее:
sudo rvm --default 1.8.7@akrotoski
sudo /etc/init.d/nginx restart
Комментарии:
1. круто — должен ли я уже удалить rvm, который я установил под пользователем ‘deploy’, как вы думаете?
2. Это может быть хорошей идеей, так вы убедитесь, что начинаете с чистой установки.
3. панорамирование — я выполнил установку в соответствии с домашней страницей rvm (которая такая же, как вы опубликовали выше, за вычетом sudo), находясь в root, и следовал инструкции по редактированию .bashrc (в данном случае/root/.bashrc), чтобы добавить дополнительную последнюю строку. Но я все еще получаю
bash: rvm: command not found
ответ при попытке вызвать rvm. Я также попытался точно следовать вашим командам, то есть установить rvm с помощью sudo, установить rvm по умолчанию с помощью sudo и переключиться на это значение по умолчанию с помощью sudo. Затем nginx перезапустился, все та же проблема: (4. В вашей конфигурации passenger на какой ruby указывает passenger? Если у вас это задано явно, вам, вероятно, следует удалить это определение, поскольку оно переопределит системное значение по умолчанию. Если оно явно не задано, попробуйте установить для него двоичный файл ruby gemset.
5. Я поместил версию ruby, установленную на rvm, первой в path (не затрагивая конфигурацию passenger, поскольку она все равно использует PATH), и перезапустил nginx, и это все рассортировало. Спасибо! Однако, что произойдет, если я захочу запустить несколько приложений в одном окне, каждое со своей версией ruby?