Ruby 1.9.2 e Rails 3 non possono aprire la console di rails

[[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 `' 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 `' 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 `' from script/rails:6:in `require' from script/rails:6:in `' 

Ho installato le guide 3 su Ruby 1.9.2p136, il che è ok credo. Ma non posso avviare la console di rails e mi dà l’errore che ho copiato. Le app hanno funzionato alla perfezione con Ruby 1.8.7 e non ho mai visto un errore come questo.

Qualche idea su cosa potrebbe essere?

Apparentemente ubuntu e ruby ​​non sempre prendono le dipendenze come dovrebbero.

Dal primo hit di google (sì, ho fatto clic su questo overflow nello stack n. 2 prima di controllare il primo risultato.)

Passare alla fonte Ruby e inserire:

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

Quindi, se sei su un’altra distribuzione, assicurati di installare readline in qualche modo (sorgente / pacchetto), quindi esegui make / install su extconf dall’origine. Ho provato ciò che gkaykck ha suggerito, naturalmente, ma l’ho ottenuto senza readline già sul mio sistema.

 $ 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 

Ricetta per chi usa rvm:

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

In maggiori dettagli su https://rvm.io/packages/readline/

Se vuoi un’altra soluzione a questo problema, fallo.

 sudo apt-get install libreadline6 

Quindi nel tuo gem file aggiungi:

 gem 'rb-readline' 

Poi

 bundle install 

E tu dovresti essere tutto pronto.

Ti consiglio di utilizzare rvm (Ruby Version Manager) per gestire le diverse versioni di Ruby e passare da una all’altra. Fa un buon lavoro di compilare le varie versioni anche per te. È anche ansible creare file .rvmrc per directory per indicare a rvm quale versione di ruby ​​usare in quale directory (oltre a utilizzare gli insiemi di gemme per progetto se si desidera!)

Prima di tutto disinstalla ogni versione ruby ​​che hai.

Dopo aver visualizzato i requisiti di rvm:

 rvm requirements 

Otterrai qualcosa come:

 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 

Installa tutte le dipendenze tramite apt-get.
Dopo aver installato Ruby 1.8.7. Questa versione è necessaria se si intende utilizzare Ruby 1.9.x.
Ora puoi installare Ruby 1.9.3:

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

Si noti che non è nemmeno necessario installare il pacchetto readline tramite rvm se lo si è installato utilizzando apt-get.

Con CentOS 6:

Ricorda che stiamo lavorando dalla directory di installazione di ruby, per me è stato:

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

Se vedi il seguente output, quindi readline non è installato:

 $ 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 

Per installare con RPM:

 yum install readline-devel 

Quindi costruisci:

 ruby extconf.rb make sudo make install 

La soluzione è di andare alla cartella sorgente che hai compilato ruby => ext => readline di

 ruby extconf.rb make sudo make install 

Aggiunta nel file Gem

 gem 'rb-readline' 

e poi bundle install

ha fatto il trucco per me

Se stai usando RVM puoi rifare la readline. Questo ha risolto il problema per me. Istruzioni qui:

nessun file da caricare – readline (carico errore)

usa rvm remove per rimuovere tutto il ruby ​​installato. fai un “che ruby” se ottieni ancora qualcosa, devi reinstallare rvm quindi installare ruby ​​usando rvm.