• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

多ruby版本环境下nosuchfiletoload解决办法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  今天下午在配置ruby开发环境时,发现一个非常trick的问题---当我们启动rails环境时会报no such file to load : iconv。

       因为我们的开发环境比较复杂,而且是基于一个legacy的系统,所以我们需要多个ruby版本。在这种情况下rvm自然成为了我们的首选目标。我当时的情况就是我需要2个不同的ree(ruby enterprise edition),一个是1.8.7-2010.02,另外一个是1.8.7-2011-03。刚开始的时候只要后面这个版本在启动rails时报no such file to load, 后来在我一怒之下卸载了rvm,然后重新安装之后发现两个版本同时报no such file to load, 当时我一下子就瞎菜了。

  休息了一下子,我google了一下发现我应该是缺少了libiconv这个组件,下载之后

  tar xzvf libconv.tar.gz

      cd libconv-1.31.1

      ./configure --prefix=/usr/local/

      make && make install

     安装了之后,

      ls /usr/local/include/ | grep 'iconv.h' 

  检查安装是否成功。安装了iconv的组件,但是它此时还是一个系统的组件,我们的ruby并无法直接调用它。要让ruby能够直接调用它我们就需要对这个组件生成一个ruby能够调用的wrapper。此时,我们需要进入到我们的ruby源代码目录下的ext(在rvm安装的ruby应该是在~/.rvm/src/ree-1.8.7-2010.02/source/ext)目录中,在这个目录你能够看到很多东西,这些东西都是ruby对os中不同组件的调用的代码。这里我们需要的是iconv,我们就进入到iconv目录中,然后执行:

 ruby extconf.rb --with-iconv-dir=/usr/local/ #如果你的liconv不是安装在默认路径,这里需要指明你的libconv的安装目录,否则生成的make文件是无效的

   make && make install

这里有一个点要特别注意就是,在执行这些脚本之前确定你的ruby版本,如果你进入到了ree-1.8.7-2010.02的ext/iconv去调用ree-1.8.7-2011.03去执行编译,显然是不work的。

 其他的类似错误报no such file to load:zlib或者ssh,解决方法都是一致的。


 刚开始的时候觉得,为什么这些ext目录的东东不在ruby开始编译时就检查系统依赖,然后直接编译,如果没有这些依赖直接报错。后来想了想,似乎并不是所有情况下我们都需要这ext,所以用到时候再编译似乎也是有道理的,因为这些东西毕竟不是core,只是ext嘛。     

  


  



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
你应该学会使用的5个ruby方法发布时间:2022-07-18
下一篇:
ProgrammingRuby阅读笔记发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap