Sinatra 使用 rackup config.ru 出现了错误 readline

zhangyuxiu · 2013年01月14日 · 最后由 zhangyuxiu 回复于 2013年01月15日 · 6866 次阅读

使用命令 bundle exec rackup config.ru,结果出现下面的错误: /gems/pry-0.9.7.4/lib/pry.rb:160:in require': cannot load such file -- readline (LoadError) from /home/user/Oauth2/DoorKeeper/doorkeeper-sinatra-client-master/gems/pry-0.9.7.4/lib/pry.rb:160:in' from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:68:in `require'

如何解决啊?

看看 Gemfile

#1 楼 @i5ting Gemfile 的内容如下: source "http://rubygems.org"

gem 'sinatra' gem 'oauth2' gem 'pry' gem 'redcarpet'

#2 楼 @zhangyuxiu

source "http://ruby.taobao.org"

然后 bundle install

#3 楼 @i5ting 按照你的方法做了,但还是一样的。bundle install 可以成功执行,但是 bundle exec rackup config.ru 后,还是上面的错误。

应该不是 source 的问题而是 ruby 安装的问题

从错误信息看楼主用的是系统 ruby, 建议 lz 换用 rvm 安装 ruby, 装好 rvm 后 rvm requirements 看需要 apt-get 或者 yum 装的内容,然后再 rvm install ruby-1.9.3-p362


问题原因:ruby 有几个 extension: readline, openssl, zlib, gdbm 是可选的,如果安装 ruby 时系统里没有对应库的开发版,那就会选择跳过。用 apt-get 安装的 ruby 就经常有这样的问题 -_-. readline 是 irb/pry 里处理历史/自动完成等功能的 extension, 找不到就是因为 readline extension 没装上。

#5 楼 @luikore 当初装 ruby 时,我选择的是源码安装,没有使用 rvm。根据你的理解,原因是 readline extension 没有安装,那么我 yum install readline.为什么还是不可以啊?

#6 楼 @zhangyuxiu 源码安装的话,装完了 readline, 转到 ruby 源代码目录里 ext/readline,

ruby extconf.rb
sudo make install

#7 楼 @luikore 我源码安装的 ruby,不知道安装 ruby 时有没有自动安装 readline?但是,我还是通过 yum 重新安装了 readline。 这是上述命令的结果:

ruby extconf.rb

checking for tgetnum() in -lncurses... no checking for tgetnum() in -ltermcap... no checking for tgetnum() in -lcurses... no checking for readline/readline.h... no checking for editline/readline.h... no [root@localhost readline]# make install make: Nothing to be done for `install'. [root@localhost readline]#

提示头文件没找到,应该装 readline-devel 之类的包先

#9 楼 @luikore 可以了!非常感谢!额外的一个问题:如安装 readline,总是不仅需要 yum install readline ,还得 yum install readline-devel。-devel 之类的包,一般是做什么用的呢?

#10 楼 @zhangyuxiu 一般的包是编译好的可执行文件或者动态链接库,可以直接用的. devel 是 development 的缩写,也就是开发用的包,一般包含头文件 (.h) 和静态库文件 (.a), 静态库是 object file 的归档 (archive), 开发者可以用 C 引入头文件,编译链接到静态库文件,通过编程使用包的功能。

readline extension 就是包装了 readline, 让你可以在 ruby 中用 readline 而已。

#11 楼 @luikore 还有就是-dev 与 -devel 一样么?我也总看到-dev 的包。

#12 楼 @zhangyuxiu 不知道... 大概一样意思吧...

#13 楼 @luikore 我也感觉是一样的。但是使用 yum install readline-dev 时就说找不到包。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号