zoukankan      html  css  js  c++  java
  • 【转】rvm安装ruby,gem,rails,之后仍然无法找到rails命令

    转自:http://chinacheng.iteye.com/blog/1738036

    rvm安装ruby和rails之后,ruby -v好使,gem -v好使。但是rails -v不好使,提示没有安装rails应用。 bundle -v也遇到了相同的问题。显然是系统没有把他加到相应的环境变量中去,手动添加环境变量可能是一种方式,当时既然我们用rvm来管理我们的各个版本的ruby和rails,那么这个时候我们去手动添加环境变量显然是不合适的。

    那么到底是其他的什么原因的,是rvm,我运行rvm use 1.9.3 --default提示我说rvm is not a function。好吧知道原因了吧。可以用以下命令来解决。

        source ~/.rvm/scripts/rvm  
        type rvm | head -n 1  
    

     执行上面的命令吧,之后你会看到这个
    rvm is a function

    另外这个只会对当前会话有效,如果要长期有效的话,把 source ~/.rvm/scripts/rvm添加到 ~/.bashrc即可

    在Multi-User模式安装的情况下,rvm是安装在/usr/local/rvm/下,另外它在安装的时候会在/etc /profile.d/目录下产生一个rvm.sh的脚本文件,查看/etc/profile文件的代码,就会发现,所有用户都会加载的这个 profile文件会遍历运行/etc/profile.d 下的所有脚本文件。
    但是我按照默认的开启终端方式,却无法找到rvm这个命令。su - 用户名是可以的,这就有点奇怪了,后来看到这篇文章 http://ruby-china.org/topics/3705 ,文章中说的恰恰是“Ubutnu的Gnome Terminal在启动时是non-login shell,而non-login shell只会读取~/.bashrc来进行初始化,所以没有读入写在~/.bash_login中的RVM loading line,以至于RVM没有作为function载入,故悲剧发生了。”,其中的一个解决方式:就是设置Gnome Terminal以login的方式启动

    Gnome Terminal默认是no-login的启动,这种情况下的加载

        execute /etc/bash.bashrc  
        IF ~/.bashrc exists THEN  
            execute ~/.bashrc  
        END IF  
    

     login shell执行的是下面

    execute /etc/profile  
    IF ~/.bash_profile exists THEN  
        execute ~/.bash_profile  
    ELSE  
        IF ~/.bash_login exist THEN  
            execute ~/.bash_login  
        ELSE  
            IF ~/.profile exist THEN  
                execute ~/.profile  
            END IF  
        END IF  
    END IF
    

     这样就不难理解为什么默认情况下无法加载/etc/profile.d/下的rvm脚本了

    文章二:类unix系统是如何初始化shell的
    http://reyesyang.info/articles/26-how-to-initialize-a-new-shell-in-unix-like-os

  • 相关阅读:
    react 采坑记录
    理解JS 模块化
    MongoDB使用教程
    scss
    gulp 使用教程
    node.js 简单入门
    jQuery
    jQuery
    php+mysql+bootstrap 实现成绩管理系统
    SVN的commit功能用bat实现
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3368213.html
Copyright © 2011-2022 走看看