RVM - поиск исполняемых файлов системных гемов - PullRequest
8 голосов
/ 17 июня 2011

Я установил RVM вместе с версиями ruby.Однако, если я запускаю консоль и запускаю сервер командной строки, устанавливаю пакет и т. Д., Я получаю эту ошибку

bash: /usr/bin/rails: /usr/bin/ruby1.8: bad interpreter: No such file or directory

Но если я сначала запускаю rvm use 1.9.2, то все в порядке.Я пытался использовать `rvm use --default 1.9.2 ', но ничего не изменилось.Означает ли это, что он использует другой рубин, чем в RVM?Заранее спасибо!

Ответы [ 3 ]

17 голосов
/ 17 июня 2011

Объяснение папок с мусором rubygems и PATH

Oh.В вашем rvm ruby ​​не было установлено rails, но вы сделали это в системном ruby.

Отдельные гемы, такие как rails, могут иметь каталог bin, который будет содержать исполняемые вспомогательные скрипты.Ваш системный rubygems по умолчанию создает символические ссылки из вашей системы / usr / bin / dir в папку gem bin для этих вспомогательных исполняемых файлов.

RVM предоставляет аналогичное средство, за исключением того, что вместо загрязнения системы / usr / bindir, он просто добавляет свою папку ~/.rvm/gems/#{rvm_gemset_string}/bin в переменную окружения PATH.


Импорт списка системных Rubygems в каталоги ваших новых rvm Ruby '

RVM по умолчанию не будет импортировать ваши драгоценные камни из вашей системной установки ruby ​​в ваши установки rvm ruby.Он делает полный чистый форк всей системы ruby, включая rubygems (гем 'rubygems') и список гемов rubygems.Когда вы rvm install 1.9.2, как будто вы сделали совершенно новую установку всего, что использовалось с ruby.

Если вы хотите, чтобы все ваши системные рубиновые гемы, которые вы ранее использовали, в предпочитаемый rvm ruby,попробуйте это:

  rvm use system
  rvm gemset export system.gems
  rvm use 1.9.2
  rvm gemset import system.gems
  #You'll now have all your system gems reinstalled to your new ruby version

Оригинальный ответ / редактирование от @ Telemachus

Попробуйте переместить строки, являющиеся источником rvm, в конец вашего ~/.bash_profile или~/.bashrc (в зависимости от того, что у вас есть):

'[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function'

.

bash: /usr/bin/rails: /usr/bin/ruby1.8: bad interpreter: No such file ...
|                 |                 ^--------------------------------\
^ Bash, not rvm;  ^/usr/bin/rails, not ~/.rvm/gems/*/bin/rails;      |
                       Some ruby leftover from a previous install in the os

У вас есть рельсы, установленные в /usr/bin, что, вероятно, до пути к каталогу rvm bin в вашемПеременная bash echo $PATH, поэтому она находит системную установку rails (/ usr / bin / rails, скрипт ruby), которая начинается следующим образом:

#! /usr/bin/ruby18

Вы должны сделатьконфликт прекращается, лучший из всех возможных способов - убедиться, что bin dir RVM находится в начале вашей PATH.Это происходит в сценарии #Load rvm environment, который вы добавили в ~/.bash_profile при установке rvm.Если вы установили rvm как системную библиотеку, а не только для своего пользователя, это будет отличаться.

Если вы дойдете до этого случая, спросите @ Telemachus.

Затем вам нужно будет убедиться, чтовы установили драгоценный камень rails в ваш новый rvm ruby, как указано выше.

Приемочный тест:

Вы обнаружите это, когда закончите rvm use 1.9.2тогда which ruby вернет что-то вроде ~/.rvm/rubies/1.9.2/bin/ruby, а which rails должно вернуть что-то вроде ~/.rvm/gems/*/bin/rails.

4 голосов
/ 08 сентября 2011

Я только что решил ту же проблему на Windows Vista.

Моя консоль выдала мне это сообщение:

$ rails -v
sh: /c/RailsInstaller/Ruby1.9.2/bin/rails: C:/Projects/railsinstaller/Stage/Ruby1.9.2  /bin/ruby.exe: bad interpreter: No such file or directory

Я только что отредактировал первую строку этогоfile:

C:\RailsInstaller\Ruby1.9.2\bin\rails

И он указал правильное местоположение для ruby.exe в моей системе, например:

#!C:\RailsInstaller\Ruby1.9.2\bin\ruby.exe

Et voilà, проблема решена!

0 голосов
/ 17 июня 2011

Вам нужно запустить rvm use --default 1.9.2, а не просто rvm use --default.

...