ruby语言升级还是比较勤快的。但是数量众多的版本使得程序库的兼容性成了大问题。有些gem表示明确不支持某个特定版本以前的ruby,而有些gem则与较高的版本不兼容。再加上gem本身也有版本,简直是乱成了一锅粥。即使使用了rvm、rbenv之类ruby版本管理工具也避免不了掉入坑中。并且时不时的一些其它环境设置也给你捣乱。所以一般使用ruby程序时,对升级ruby版本或各种gem版本都是比较慎重的,避免一时手贱掉入坑中。

当然你也不能因此就做缩头乌龟,某些情况下还是不得不升级的。比如想使用ruby或gem新版本的特性。而我本人无论使用什么软件都喜欢升级到最新版本,ruby程序也不例外。时间久了栽的次数多了也慢慢摸索出了一些经验。这里分享一下,希望大家都能避免这些坑,大胆的升级。

由于本人使用的操作系统是mac,所以这些tips都是基于MAC系统的。

当运行ruby脚本或者bundle install时,出错了首先一定要仔细看错误日志。如果有明确的出错日志,自己能解决的就可以着手解决,不知如何解决的可以选取关键词google之,一般也能找到解决方案。怕就怕google一圈以后还是不知如何是好。那么可以尝试下下面的几种方法。

升级ruby的小版本。

首先将当前的rvm升级到最新版本。

1
$ rvm get stable

然后查看当前使用的ruby版本和服务端可用的ruby版本。

1
2
3
$ rvm list

$ rvm list known

虽然不打算升级ruby主版本,但是小版本是可以尝试升级下,看是否能解决问题。比如当前你的ruby使用的是ruby-1.9.3-p448,但是查看到目前可用的1.9.3最新版本为ruby-1.9.3-p545。那么可以尝试切换到这个新版本下看能否解决问题。

1
2
3
$ rvm install ruby-1.9.3-p545

$ rvm use ruby-1.9.3-p545

确保Xcode及Command line developer tools为最新版本

请确保本机的Xcode的 command line developer tools已经安装并且是最新版本。把Xcode升级到最新版本以后,在命令行下输入:

1
$ xcode-select —install

这样会弹出来一个升级对话框来升级相应的软件。

确保GCC为最新版本

查看目前电脑的gcc的版本。

1
$ gcc -v

如果需要更新gcc的话推荐通过homebrew来更新。首先更新homebrew。

1
$ brew update

然后输入下列命令。

1
2
$ brew tap homebrew/dupes
$ brew search gcc

brew会告诉你当前最新的gcc版本。例如是apple-gcc42。然后安装新版本gcc。

1
$ brew install apple-gcc42

然后查看系统是否应用了这个版本的gcc。

1
2
$ which gcc-4.2
/usr/local/bin/gcc-4.2

基本上以上的一些检查会解决掉一批由于ruby环境造成的问题。

使用ruby过程中遇到安装gem失败的一些通用解决方案的更多相关文章

  1. MySQL安装过程中对The error code is 2203的解决方案

    MySQL安装过程中对The error code is 2203的解决方案 1.问题描述 Windows系统安装MySQL遇到The error code is 2203.,具体描述如下 The i ...

  2. ubuntu 可能的依赖包,安装过程中根据需要安装

    /*************依赖包安装****************/下面是可能的依赖包,安装过程中根据需要安装 build-essential - libglib2.-dev libpng3 li ...

  3. VS·调试过程中某个操作导致调试突然退出之解决方案

    阅文时长 | 0.11分钟 字数统计 | 232字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·调试过程中某个操作导致调试突然退出之解决方案』 编写人 | SCscHero 编 ...

  4. 安装python caffe过程中遇到的一些问题以及对应的解决方案

    关于系统环境: Ubuntu 16.04 LTS cuda 8.0 cudnn 6.5 Anaconda3 编译pycaffe之前需要配置文件Makefile.config ## Refer to h ...

  5. Odoo 仓库调拨移动过程中 单位不允许错误的分析及解决方案

    Odoo 仓库调拨过程中,有时候会碰见一下错误内容: The roundings of your Unit of Measures on the move vs.  on the product do ...

  6. 3.3 Spring5源码---循环依赖过程中spring读取不完整bean的最终解决方案

    根据之前解析的循环依赖的源码, 分析了一级缓存,二级缓存,三级缓存的作用以及如何解决循环依赖的. 然而在多线程的情况下, Spring在创建bean的过程中, 可能会读取到不完整的bean. 下面, ...

  7. grunt-contrib-qunit安装过程中phantomjs安装报错问题解决

    今天自己fork了一个github上别人写的一个关于grunt项目的一个小demo(https://github.com/cowboy/jquery-tiny-pubsub),主要是想学习下grunt ...

  8. centos7安装过程中的安装源设置

    centos7的安装源设置:http://mirrors.aliyun.com/centos/7/os/x86_64/

  9. Setup Factory 9 打包安装程序过程中提示安装.net4.5、并启用md5加密算法

    1.在Before Installing选项卡中选择Ready to Install,点击Edit进入编辑窗口,切到最后一个选项卡Actions,把判断内容复制进去 -- These actions ...

随机推荐

  1. struts2中如何使用主题theme

    一.什么是主题? 主题就是一种风格化标签,能够让所有UI标签能够产生同样的视觉效果而归集到一起的一组模板,即风格相近的模板被打包为一个主题 二.struts2提供的主题有哪些呢?struts2中如何修 ...

  2. Spring 容器

    Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口. 他们都可代表Spring容器, ...

  3. CAD 二次开发--属性块

    1.属性块的定义 属性块是有构成的实体和附加信息(属性)组成的,属性块中块的定义与简单块中块的定义一样,而属性的定义主要是通过属性的AttributeDefinition类的有关属性和函数来实现的.具 ...

  4. jQuery基础_3

    DOM:文档处理内部插入:父子级关系$("a").append($("b"))把b插入到a中[a里面的后面]$("b").appendTo( ...

  5. iOS 状态栏设置

    1. 软件启动瞬间即弹出启动图的时候隐藏状态栏的方法 修改<YOUR_APP>-Info.plist,在Xcode中修改,在根结点Iinfo下面新加一项“Status bar is ini ...

  6. jsQunit

    1:什么是单元测试? 1.1:单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.单元测试主要是用来检验程式的内部逻辑,也称为个体测试.结构测试或逻辑驱动测试.通常 ...

  7. 我与solr(五)--关于schema.xml中的相关配置的详解

    先把文件的代码贴上来: <?xml version="1.0" encoding="UTF-8" ?> <!-- 版权说明... --> ...

  8. JSON: Property 'xxx' has no getter method的解决办法

    在使用JSONArray.fromObject时候出现JSONException:Property 'xxx' has no getter method. 解决办法:设置bean为public属性即可 ...

  9. Traceroute命令原理(转)

    Traceroute命令基本功能 该命令用于测试两个TCP/IP系统之间的网络层连通性和显示传输路径中每一跳地址,又称为路径跟踪,如果Traceroute命令测试成功,我们能够观察到从源主机到目的主机 ...

  10. Django-简单项目创建

    在磁盘中找到需要存放项目代驾的目录,进入该目录(本机为: /Downloads/All) 输入Django创建项目命令:django-admin startproject mysite,此时在目录下会 ...