2011-02-07 57 views
47
[[email protected] myApplication]$ rails console 
/usr/local/lib/ruby/1.9.1/irb/completion.rb:9:in `require': no such file to load -- readline (LoadError) 
    from /usr/local/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands/console.rb:3:in `require' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands/console.rb:3:in `<top (required)>' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:20:in `require' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/commands.rb:20:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

我在ruby 1.9.2p136上安装了rails 3,这没关系。但我无法启动rails console,它给了我复制的错误。这些应用程序与红宝石1.8.7很好,我从来没有看到这样的错误。Ruby 1.9.2和Rails 3无法打开导轨控制台

任何想法它可能是什么?

+1

你是如何安装1.9.2的?您需要先安装readline,然后使用readline支持编译ruby。另外,从堆栈跟踪看起来它正在使用1.9.1 ... – idlefingers 2011-02-07 15:05:13

+0

当您为1.9.2键入irb时会发生什么?你可以要求'readline'吗? – fifigyuri 2011-02-07 15:08:08

+0

@idlefingers我从源码安装了1.9.2,如果我要求ruby -v它会显示“ruby 1.9.2p136(2010-12-25 revision 30365)[i686-linux]”。我不知道readline,但除了irb一切正常工作 – gkaykck 2011-02-07 15:15:04

回答

50

显然Ubuntu和红宝石并不总是捉依赖关系应该像他们。

first google hit(是的,我检查出的第一个结果之前点击到位#2栈溢出。)

导航到Ruby源代码,然后输入:

sudo apt-get install libreadline5-dev 
cd ext/readline 
ruby extconf.rb 
make 
sudo make install 

所以,如果您在另一个发行版中,请确保以某种方式安装readline(source/package),然后在源extconf上运行make/install。我尝试了什么gkaykck建议当然,但没有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 
5

我建议使用rvm (Ruby Version Manager)来管理您的不同版本的Ruby并在它们之间切换。它为你编译各种版本也做得相当不错。您甚至可以创建每个目录的.rvmrc文件,以告诉rvm在哪个目录中使用哪个版本的ruby(以及如果需要,可以使用per-project gem sets!)

1

解决方法是转到源文件夹编译红宝石=> EXT => readline的

ruby extconf.rb 
make 
sudo make install 
29

食谱对于那些谁使用RVM:

rvm pkg install readline 
rvm remove 1.9.3 
rvm install 1.9.3 --with-readline-dir=$rvm_path/usr 

在有关它的更多细节https://rvm.io/packages/readline/

5

首先卸载的你拥有的每红宝石版本。

之后显示RVM要求:

rvm requirements 

你会得到这样的:

Requirements for Linux (DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=11.10 
DISTRIB_CODENAME=oneiric 
DISTRIB_DESCRIPTION="Ubuntu 11.10") 

NOTE: 'ruby' represents Matz's Ruby Interpreter (MRI) (1.8.X, 1.9.X) 
This is the *original*/standard Ruby Language Interpreter 
     'ree' represents Ruby Enterprise Edition 
     'rbx' represents Rubinius 

bash >= 4.1 required curl is required git is required (>= 1.7 for 
ruby-head) patch is required (for 1.8 rubies and some ruby-head's). 

To install rbx and/or Ruby 1.9 head (MRI) (eg. 1.9.2-head), then you 
must install and use rvm 1.8.7 first. 

Additional Dependencies: 
# For Ruby/Ruby HEAD (MRI, Rubinius, & REE), install the following: 
    ruby: /usr/bin/apt-get install build-essential openssl libreadline6 
    libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev 
    libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev 
    ncurses-dev automake libtool bison subversion 

# For JRuby, install the following: 
    jruby: /usr/bin/apt-get install curl g++ openjdk-6-jre-headless 
    jruby-head: /usr/bin/apt-get install ant openjdk-6-jdk 

# For IronRuby, install the following: 
    ironruby: /usr/bin/apt-get install curl mono-2.0-devel 

安装通过apt-get的依赖关系。
之后安装红宝石1.8.7。

rvm pkg install readline 
rvm remove 1.9.3 
rvm install 1.9.3 --with-readline-dir=$rvm_path/usr 

请注意,你甚至需要安装通过RVM readline的包,如果你已经使用apt安装它:如果你打算使用Ruby 1.9.x的
现在你可以安装Ruby 1.9.3这个版本是必需的-得到。

11

如果想要另一个解决这个问题做到这一点。

sudo apt-get install libreadline6 

然后在你的宝石文件中加入:

gem 'rb-readline' 

然后

bundle install 

而且你应该所有设置。

0

使用rvm remove删除所有安装的ruby。 做一个“哪个红宝石”,如果你仍然得到一些东西,你需要重新安装rvm,然后使用rvm安装ruby。

3

在CentOS 6:

记住我们是从红宝石工作安装目录,对我来说是:

/opt/ruby-1.9.3-p194/ext/readline 

如果你看到下面的输出,那么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 

要使用RPM安装:

yum install readline-devel 

然后构建它:

ruby extconf.rb 
make 
sudo make install 
1

添加在Gemfile中

gem 'rb-readline' 

然后bundle install

的伎俩我