2013-08-04 13 views
9

Ho configurato un ambiente Rails tre volte con diversi SO e con Rails 3 e 4. Funziona senza problemi finché non apro una console per digitare un po 'di Ruby o ispeziono il mio database con rails console o rails dbconsole. Ottengo qualcosa di simile a:Cosa c'è di sbagliato in readline?

$ rails console 
/home/tobias/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/completion.rb:9:in  `require': no such file to load -- readline (LoadError) 
from /home/tobias/.rvm/rubies/ruby-1.9.2-p18080/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>' 
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands/console.rb:3:in `require' 
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gemsems/railties-3.0.9/lib/rails/commands/console.rb:3:in `<top (required)>' 
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands.commandsrb:20:in `require' 
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railsilties-3.0.9/lib/rails/commands.rb:20:in `<top (required)>' 
from scriptt/rails:6:in `require' 
from script/rails:6:in `<main>' 

Si tratta de "Fixing readline for the Ruby on Rails console". Questo ha risolto il mio problema due volte.

Ora sto usando Rails 4 e Ruby 2 ed è andata bene fino a quando:

[email protected] ~/src/rpg $ rails console 
/home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/completion.rb:9:in `require': /usr/local/lib/libreadline.so.6: undefined symbol: UP - /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/x86_64-linux/readline.so (LoadError) 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/completion.rb:9:in `<top (required)>' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:3:in `require' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:3:in `<top (required)>' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:53:in `require' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:53:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

Il blog non mi ha aiutato questa volta. StackOverflow ha domande pertinenti:

L'ultimo ha suggerito di aggiungere al mio gem 'rb-readline' Gemfile. Ho aggiunto la linea, corse bundle install e ottenuto questo:

[email protected] ~/src/rpg $ rails console 
Loading development environment (Rails 4.0.0) 
/home/mto/.rvm/scripts/irbrc.rb:30:in `block in <top (required)>': uninitialized constant Readline (NameError) 
/home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/input-method.rb:150:in `gets': uninitialized constant IRB::ReadlineInputMethod::Readline (NameError) 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:472:in `block (2 levels) in eval_input' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:624:in `signal_status' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:471:in `block in eval_input' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:190:in `call' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:190:in `buf_input' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:105:in `getc' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/slex.rb:206:in `match_io' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/slex.rb:76:in `match' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:290:in `token' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:266:in `lex' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:237:in `block (2 levels) in each_top_level_statement' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `loop' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `catch' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `each_top_level_statement' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:488:in `eval_input' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:397:in `block in start' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:396:in `catch' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:396:in `start' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start' 
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

"Rails 3: uninitialized constant IRB::ReadlineInputMethod::Readline (NameError) in Heroku" risolto il problema legando la gemma alla versione 0.4.2. Ho avuto 0.5.0.

Perché una libreria semplice, che ha un posto così centrale in Rails, e in Ruby, credo, causa così tanto dolore? Viene fatto qualcosa per rendere tutto più semplice?

Questa è solo una libreria per leggere le righe dalla console, giusto? Dove sta andando storto negli esempi sopra? Mi piacerebbe sapere perché e non cosa e come.

+2

Segnala un bug per rvm (https://github.com/wayneeseguegu /rvm/issues) - questo dovrebbe essere gestito installando librerie/intestazioni appropriate da autolibs - ma richiede un po 'di debug per essere sicuro funziona correttamente – mpapis

+0

Ho lo stesso problema in un server ma non nell'altro .. l'unica differenza che sto vedendo è la versione 'rbenv'' rbenv 0.4.0-74-g95a039a' funziona senza 'rb-readline' gemma soluzione, e quello con 'rbenv 0.4.0-75-gbe5e1a' non funziona.Aggiungere la gemma 'rb-radline v0.4.2' al mio Gemfile ha reso il trucco come @ deepender-singla ha detto. – fguillen

risposta

5

Si può fare questo e ha funzionato per me:

gem install rb-readline 

e aggiungere la seguente riga al Gemfile del progetto:

gem 'rb-readline', '~> 0.4.2' 

sto bloccaggio gioiello a questa versione come versione aggiornata darà qualche errore

+0

Grazie per la risposta. Non lo accetterò comunque, dal momento che non risponde perché non funziona in 0.5 o se qualcuno sta lavorando per risolvere questo problema. Il mio punto principale è che una biblioteca centrale come questa dovrebbe funzionare fuori dagli schemi. – toftis

+0

okey, ho capito che potrei essere in grado di usarlo nel tempo in modo che il tuo lavoro non ne risenta. –

+0

Questo non ha funzionato per me. :( – Magne

0

La risposta sopra funziona bene. Installare il sistema gemma ampia

gem install rb-readline 

o aggiungendo la gemma sopra per i vostri progetti Gemfile

gem 'rb-readline' 

Ma se voi ragazzi non si desidera includere gemme in più nel vostro Gemfile e avete scaricato rubino utilizzando il file sorgente effettuare le seguenti operazioni: -

sudo apt-get install libreadline-gplv2-dev libncurses5-dev 
cd ~/.rvm/src/ruby-1.9.2-p180/ 
make clean 
cd ~/.rvm/src/ruby-1.9.2-p180/ext/readline 
ruby extconf.rb 
cd ~/.rvm/src/ruby-1.9.2-p180/ 
make 
make install 

Utilizzare sudo se richiesto :). Spero che questo aiuti :)

Problemi correlati