установка 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
fyi: нам довелося запустити новий термінал після цього.
ома

2
@mpapis Як я можу встановити gnome-terminal на "Запустити команду як оболонка входу" на віддалений сервер, для якого я не можу переслати X-сервер на свою машину?
Waseem

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.
vekozlov

19
Це рішення працює лише в поточному сеансі оболонки. Якщо ви дотримуєтеся цього рішення, вам доведеться повторювати ці дії кожного разу, коли ви знову входите на консоль. Більш постійним рішенням є додавання до файлу ~ / .bashrc: if test -f ~ / .rvm / scriptpts / rvm; тоді ["$ (тип -t rvm)" = "функція"] || джерело ~ / .rvm / script / rvm fi
Стенлі

Це дійсно повинно бути на сторінці інтеграції гномів RVM, набагато більш лаконічним і працює як принадність на монетному дворі з надією KDE & Cinammon, тим не менше
k4t434sis,

1
А що робити, якщо це все ще не є функцією після того, як ви все це зробите?
Br.Bill

Якщо рішення @ Стенлі не працює, також зробіть це: 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 не робить цього автоматично?
balki

@mpapis - менеджер випуску rvm, і він каже, що робити це таким чином "може провалити X-сеанси (Fedora 17, якщо я правильно пам'ятаю), він не дає сеансів rsync ... і більше причин я не можу згадати зараз". Я думаю, що я просто дотримуюся `/ bin / bash --login.
кімбауді

29

Я теж стикався з цією проблемою. Нарешті я виконав цей рядок на терміналі.

source ~/.rvm/scripts/rvm

Проблема виправлена. Оскільки цей рядок зробить екземпляр RVM функцією для певного часу.


2
Найпростіша відповідь з усіх. просто введіть цю лінію у свій ~ / .bashrc, і вам добре працювати з будь-яким термінальним емулятором.
Nikkolasg

1
Привіт - хоча ця команда "виправляла" речі для семінару терміна, в якому я був, результати не були липкими і не допомагали новим (або іншим) сесійним термінам. І, схоже, робочий стіл також не знає змін. Я також "анти-" вхід, тому що це базується на сеансі / вході. Особисто я хочу можливість порівнювати одну і ту ж програму з різними версіями Ruby-s та версіями.
буде

1
Ти справжній mvp. Нічого іншого не вийшло, поки я не спробував цього. Мені байдуже, чи це тимчасово, мені просто потрібні виправлення.
ian-Campbell

Де знаходиться файл встановлення для rvm, тож при його встановленні він береться за ці та інші проблеми? Я використовував процес, описаний на їх домашній сторінці, і витратив години, намагаючись довести його до «просто роботи». Повинно бути щось на кшталт "yum install rvm", і все зроблено і готово до роботи.
ДжозефК

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 / scriptpts / rvm"]] && source "$ HOME / .rvm / scriptpts / rvm" та видалив його з .bashrc - I доданий джерело ~ / .bash_login в кінці .bashrc і на початку будь-якого скрипта , який змінює gemsets на переправі
Rod McLaughlin

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 ' у свій термінал (після перезавантаження терміналу), а потім наберіть comand '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 - шлях)

Ви повинні змінити 1.9.3 для рубінової версії, яку ви насправді хочете, і вона зробить rvm функцією незалежно від типу оболонки.


7

навіть якщо ви прийняли відповідь, я хотів би запропонувати інший спосіб .. ~ / .bashrc завантажується перед відкриттям будь-якої оболонки. Додайте цей рядок наприкінці цього, і вам не потрібна жодна річ оболонки для входу


"ця штука оболонки для входу" є чомусь, я зробив багато тестів за допомогою пошуку RVM, і це єдиний спосіб, який гарантує роботу без невизначення і важко вирішити помилки
mpapis

@mpapis Чи можете ви пояснити причину? З інших відповідей, схоже, більшість добре з переміщенням рядка в файл rc
balki

наприклад, він може провалити X-сеанси (Fedora 17, якщо я правильно пригадую), він не дає сеансів rsync ... і більше причин я не можу згадати зараз
mpapis

7

Можливо, ви можете спробувати нижче:

  • Ваш термінал ->
  • Редагувати ->
  • Налаштування профілю ->
  • Назва та команда ->
  • Поставте прапорець "Запустити команду як оболонку входу"
  • Зроблено

Це найпростіше рішення і правильне рішення, оскільки звичайна оболонка пропускає .profile, використання цієї опції призведе до завантаження і не потрібно редагувати .bashrc взагалі.
DWils


4

Відкрийте термінал, а потім перейдіть до меню Правка> Налаштування профілю, а потім перейдіть на вкладку " Заголовок і команда " і поставте прапорець " Запустити команду як оболонка входу ".

Завантажте Bash і тепер ви можете встановити Gems безпосередньо з терміналу без використання sudo, і помилка " RVM не є функцією. Вибір рубінів із" rmm use ... "не буде працювати. "

Ура.


4

Усі вищезазначені відповіді справедливі. Але коли я зіткнувся з тим же питанням, рішення було таке:

  • Оновіть ZSH. (Спробував оновити безпосередньо, я не працюю чомусь. Тож деінстальована та перевстановлена ​​оновлена ​​версія звідси )
  • Встановіть оболонку за замовчуванням як 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 Не будучи функцією пішло. Якщо це все ще не працює, вкажіть тут деякий слід помилок. Після кількох годин боротьби за вирішення цього питання я впевнений, що, мабуть, бачив усі пов'язані з цим помилки.

Сподіваюся, це допомагає. Ура!


так, сер. Це працювало для мене. Не зрозумів найважливішої частини пункту, але, він працював.
Рікбермо

Якщо ви спробуєте встановити 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" на піктограмі користувача на лівій панелі панелі та виберіть "Додаткові параметри ..."
  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/

Примітки:

  • Щоб встановити рубін, можливо, вам потрібно буде вказати компілятор clang:

    $ rvm встановити 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 та запустіть джерело .profile




0

У мене була така ж помилка, але жодне з рішень на цій сторінці, здається, не працює. Для мене було достатньо додати rvmвиконуваний файл до мого шляху:

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

Et voila!


0

У мене був такий самий випуск, і я це зробив у своєму .bash_profile, і він працював. source "$HOME/.rvm/scripts/rvm".


0

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

Ви починаєте свій термінал з

lxterminal -e "bash -il"

Дякую @mpapsis, який вказав на мене в правильному напрямку


Оскільки посилання іноді є тимчасовими, може бути хорошою ідеєю вставити крихітний конспект у відповідь для нащадків.
Марсель Вілсон

0

Мій нечистий спосіб змінити рубінову версію

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.