Установка rvm не работает: «RVM - это не функция»


234

Я только что установил RVM, но не могу заставить его работать. У меня есть такая строка в конце моего .profileфайла:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

Я попытался запустить source .profileи перезапустить терминал, но все же, когда я бегу, rvm use 1.9.2я получаю:

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

Моя система - Ubuntu 11.10.


2
Я рекомендую вам rbenv в качестве альтернативы RVM. Его не нужно загружать в вашу оболочку.
Дринора

10
Везде, где у кого-то есть проблемы с определенной технологией, всегда есть герой в сияющих доспехах, с ценным советом отбросить эту технологию и установить совершенно альтернативную, совершенно потрясающую другую, без отступлений. Это как если бы я спросил какой - то рубиновый вопрос , и что герой сразу же придумал «просто установить Java» =)
священнослужитель

Ответы:


236

Вы не используете оболочку входа в систему.

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

Таким образом, вам необходимо проверить опцию «Запуск от имени оболочки входа» в настройках терминала Gnome. После этой установки флаг необходимо открыть новый терминал.

Иногда требуется установить команду на /bin/bash --login.


Для удаленных соединений важно понимать разницу между запуском интерактивного sshсеанса и выполнением отдельных команд.

Во время работы, ssh serverа затем в интерактивном режиме работы с сервером вы используете оболочку входа по умолчанию, и это нормально, но ssh server "command"вы не используете оболочку входа в систему и ее необходимо будет запустить ssh server 'bash -lc "command"'.

Любой удаленный вызов может иметь ту же проблему, что и выполнение одной команды с помощью ssh.


4
Каким будет эквивалентное решение для Mac?
Адам Грант

8
попробуйте rvm get stable --autoпроверить настройки своего терминала
mpapis

10
К вашему сведению: мы должны были запустить новый терминал после установки этого.
Ома

2
@mpapis Как мне настроить gnome-terminal на «Запускать команду как оболочку входа в систему» ​​на удаленном сервере, для которого я не могу перенаправить X-сервер на мою машину?
Васим

12
Следуя совету @ mpapis, --autoон был объявлен устаревшим в пользу команды, --auto-dotfilesпоэтому команда теперь rvm get stable --auto-dotfiles
Март Ван де Вен

432

Вам нужно запустить следующее

$ source ~/.rvm/scripts/rvm

затем запустите это

$ type rvm | head -n 1

и если вы получите

rvm is a function

проблема решена.

Вам также нужно запустить, user$ rvm requirementsчтобы увидеть требования зависимости для вашей операционной системы

Источник: https://rvm.io/rvm/install/

Я забыл упомянуть, что вам нужно поместить этот код в файл ~ / .bashrc или ~ / .zshrc, и вам не нужно будет снова писать этот код. Ура!


2
Спасибо. У меня работало на Ubuntu 10.04.
Векозлов

19
Это решение работает только в текущем сеансе оболочки. Если вы следуете этому решению, вам придется повторять эти шаги каждый раз при повторном входе в консоль. Более постоянное решение - добавить в файл ~ / .bashrc следующее: if test -f ~ / .rvm / scripts / rvm; затем ["$ (type -t rvm)" = "function"] || источник ~ / .rvm / scripts / rvm fi
Стэнли

Это действительно должно быть на странице интеграции с gnome RVM, гораздо более кратким и, тем не менее,
сработавшим

1
А что, если после этого ты все еще не работаешь?
Br.Bill

Если решение @ Stanley не работает, также сделайте это: stackoverflow.com/questions/820517/bashrc-at-ssh-login
Адам Грант

105

Чтобы навсегда решить эту проблему, просто вырезайте / вставьте следующую строку:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

От: ~/.bash_profileфайл

В: ~/.bashrcфайл

Причиной этой работы является то, что .bashrcвыполняется каждый раз, когда вы входите в терминал, и .bash_profileкаждый раз, когда вы входите в систему. Вот почему решение /bin/bash --loginработает, но вы должны делать это каждый раз, когда входите в терминал. Таким образом, вы настроены до следующего формата, и к тому времени вы все забудете :)


Как пользователь экрана, я всегда должен поставить эту строку ~/.bashrcвместо ~/.bash_profile.
ryenus

2
Спасибо! Я был чрезвычайно обеспокоен двухсекундной задержкой, необходимой для входа в систему. Это предотвратит эту задержку.
Justinpage

6
Почему установка rvm не делает это автоматически?
балки

@mpapis является менеджером релизов для rvm, и он говорит, что, делая это таким образом, «может провалить X-сессии (Fedora 17, если я правильно помню), он проваливает сессии rsync… и другие причины, которые я сейчас не могу вспомнить». Я думаю, что я собираюсь просто придерживаться `/ bin / bash --login.
Кимбауди

29

Я тоже сталкивался с этой проблемой. Наконец я выполнил эту строку на терминале.

source ~/.rvm/scripts/rvm

Проблема исправлена. Потому что эта строка сделает экземпляр RVM функцией на определенное время.


2
Самый простой ответ из всех. просто поместите эту строку в ваш ~ / .bashrc, и вы можете использовать любой эмулятор терминала.
Nikkolasg

1
Привет - хотя эта команда «исправляла» вещи для сеанса термина, в котором я находился, результаты не были липкими и не помогали новым (или другим) сеансам термина. И кажется, что рабочий стол также не знает об изменениях. Я тоже "против" входа в систему, потому что он основан на сеансе / входе в систему. Лично мне нужна возможность сравнивать одну и ту же программу с разными Ruby-овами и версиями.
будет

1
Ты настоящий MVP. Ничто другое не сработало, пока я не попробовал это. Мне все равно, если это временно, мне просто нужно исправить.
Ян-Кэмпбелл

Где находится установочный файл для rvm, поэтому при установке он позаботится об этой и других проблемах? Я использовал процесс, описанный на их домашней странице, и часами пытался заставить его «просто работать». Должно быть что-то вроде "yum install rvm", и все готово и готово к работе.
JosephK

21

Последний RVM (rvm 1.11.6 (стабильный)) перестал работать на Ubuntu (10.10 - 64 бит - всезнайка или что-то еще) - я продолжал получать

«RVM - это не функция, выбор рубинов с помощью« rvm use ... »не будет работать».

Раньше я получал сообщение, но 'rvm 1.9.3-p0@rails321' работал бы. Теперь это не сработает - вы не сможете изменить наборы гемов вообще.

Ничего не получалось, пока я не нашел это - сделайте это последней строкой в /home/your-name/.bashrc

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"


2
"rvm get stable --auto" добавлено в .bash_login [[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" и удалено из .bashrc - I добавил источник ~ / .bash_login в конце .bashrc и в НАЧАЛЕ любого скрипта, который изменяет наборы гемплов в середине потока
Род Маклафлин,

9

Как вы сказали, показанная ошибка может быть следующей.

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command. 
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

Как сказано выше, просто введите « / bin / bash --login » в своем терминале (после перезапуска терминала), затем введите команду «rvm use 1.9.3» (например,), и она начнет использовать ту же версию.

Просто выполните команду 'ruby -v', чтобы подтвердить, что RVM использует обновленную версию Ruby.


8

У меня была эта проблема также при новой установке rvm, и ни один из ответов здесь не устранил ее. Зайдя на официальный сайт rvm, в разделе основы, они имеют следующую команду:

# с http://rvm.io/rvm/basics

source $ (rvm 1.9.3 do rvm env --path)

Вы должны изменить 1.9.3 на версию ruby, которая вам действительно нужна, и это сделает rvm функцией независимо от типа оболочки.


7

даже если вы приняли ответ, я хотел бы предложить другой способ .. ~ / .bashrc загружается перед открытием любой оболочки. Добавьте эту строку в конце этого, и вам не нужно ничего из этой оболочки входа в систему


«эта оболочка входа в систему» ​​существует по какой-то причине, я провел много тестов с использованием RVM-поиска, и это единственный способ, который гарантирует работу без необнаружимых и трудных для устранения ошибок
mpapis

@mpapis Можете ли вы объяснить причину?
Судя по

например, он может провалить сеансы X (Fedora 17, если я правильно помню), он проваливает сеансы rsync ... и больше причин, которые я не могу вспомнить прямо сейчас
mpapis

7

Может быть, вы можете попробовать ниже:

  • Ваш терминал ->
  • Редактировать ->
  • Настройки профиля ->
  • Название и команда ->
  • Проверьте «Выполнить команду как оболочку входа»
  • Готово

Это самое простое и правильное решение, так как обычная оболочка пропускает .profile, использование этой опции приведет к его загрузке и вообще не нужно редактировать .bashrc.
DWils


4

Откройте терминал, затем перейдите в « Правка»> «Настройки профиля», затем перейдите на вкладку « Заголовок и команда » и установите флажок « Выполнить команду как оболочку входа ».

Загрузите Bash, и теперь вы можете установить Gems непосредственно из терминала без использования sudo, и ошибка « RVM не является функцией, выбор рубинов с помощью« rvm use ... »не будет работать ».

Приветствия.


4

Все приведенные выше ответы действительны. Но когда я столкнулся с той же проблемой, решение было следующим:

  • Обнови ЗШ. (Попытка обновления напрямую не работает по какой-то причине. Поэтому удалите и переустановите обновленную версию отсюда )
  • Установить оболочку по умолчанию как zsh (т.е. если вы предпочитаете zsh), используяsudo chsh -s $(which zsh) $USER
  • Убедитесь, что следующий код находится внизу вашего .zshrcпосле того, как вы установили последнюю версию RVM, возможно, с использованием CURL с официального сайта RVM

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • САМОЕ ВАЖНОЕ ЗАМЕЧАНИЕ. Убедитесь, что в вашем .zshrcфайле PATHдобавлен каждый экспорт в :$PATH. Который я полагаю, был корнем моих проблем даже после выполнения вышеупомянутых шагов.

  • отправить это все мои проблемы РВМ Не будучи функция ушла. Если это все еще не работает, дайте некоторую трассировку ошибки здесь. После нескольких часов борьбы, чтобы решить эту проблему, я уверен, что я видел все связанные ошибки.

Надеюсь, поможет. Ура!


да сэр. Это сработало для меня. Не понял САМОЙ ВАЖНОЙ ТОЧКИ часть, но, это сработало.
Рикбермо

Когда вы попытаетесь установить RVM, он выдаст предупреждение, если у вас есть export PATH="/usr/bin:". Он попросит вас присоединиться $PATHк нему. Это было причиной одной из моих проблем. Следовательно, каждый export PATHдолжен был $PATHдобавляться так, чтобы перед экспортом добавлялась любая PATHпеременная. В любом случае, хорошо, что это было полезно.
Вишну Наранг

3

Процедура установки Ruby 1.9.3-p125 на Mac OSX 10.8 Mountain Lion

  1. Вы уже установили последнюю версию XCode (> = 4.3) и компилятор Objective-C командной строки "clang".
  2. Вы должны запустить оболочку "bash", чтобы эта процедура работала.
  3. Перейти к системным настройкам
  4. Нажмите на «Пользователи и группы»
  5. Нажмите на замок в левом нижнем углу панели и введите свой пароль, чтобы разблокировать его.
  6. «Ctrl-Click» на значке пользователя в левой панели панели и выберите «Дополнительные параметры ...»
  7. Измените оболочку входа на «/ bin / bash»
  8. Закройте настройки
  9. Откройте окно терминала (нажмите команду + пробел и введите «терминал»)
  10. Следуйте инструкциям на:

http://www.frederico-araujo.com/2011/07/30/installing-rails-on-os-x-lion-with-homebrew-rvm-and-mysql/

Ноты:

  • Чтобы установить ruby, вам может потребоваться указать компилятор clang:

    $ rvm install 1.9.3p125 --with-gcc = clang

  • Если RVM пишет о том, что / usr / local / rvm не найден, вам нужно создать ссылку:

    $ ln -s / Users / [ваше имя пользователя] /. rvm / usr / local / rvm


Я думаю, что они до P194 сейчас. Если вы установите rvm 1.9.3 --with-gcc = clang, вы автоматически получите последнюю версию 1.9.3.
Джордж Кэмпбелл


1

Я получил ту же ошибку, потому что когда-либо устанавливал старую версию rvm ruby-rvm с помощью команды apt-get.

Я решил проблему, удалив строку сценария для настройки старого rvm в файле .bashrc.

Проверьте старый конфигурационный скрипт rvm и затем запустите source .profile



1

Я исправил это, добавив эту строку в .bash_profile:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

0

У меня была та же самая ошибка, но ни одно из решений на этой странице, казалось, не работало. Для меня было достаточно добавить rvmисполняемый файл к моему пути:

PATH=$PATH:/usr/local/rvm/bin/

И вуаля!



0

Для тех, кто приходит с той же проблемой, и они используют lubuntu, как я, я пошел по этой ссылке :

Вы начинаете свой терминал с

lxterminal -e "bash -il"

Спасибо @mpapsis, который указал мне правильное направление


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

0

Мой грязный способ изменить версию ruby

rvm alias create default ruby-2.2.3 && source ~/.bashrc && rvm list

это работает, потому что у меня есть строка ниже в моем ~ / .bashrc, но странно, что она не выполняет эту работу автоматически.

[[ -s "/usr/local/rvm/bin/rvm" ]] && source "/usr/local/rvm/bin/rvm"

Я пытался соединиться с --login в моем контейнере докера

docker run -it imagename `/bin/bash --login`

но в этом случае контейнер остается открытым в фоновом режиме, и я не могу вводить команды.

Я пробовал и ZHC и терминал с опцией "открыть с /bin/bash --login"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.