Установка 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.