2013-08-04 27 views
9

Skonfigurowałem środowisko Rails trzy razy z różnymi systemami operacyjnymi oraz z Railsami 3 i 4. Przechodzi ono płynnie, aż otworzę konsolę, aby wpisać trochę Rubiego, lub sprawdzam moją bazę danych pod numerem rails console lub rails dbconsole. Dostaję coś podobnego do:Co jest nie tak z 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>' 

Jest to z "Fixing readline for the Ruby on Rails console". To rozwiązało mój problem dwukrotnie.

Teraz używam Szyny 4 i Ruby 2 i poszło dobrze, dopóki:

[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>' 

blogu nie pomoże mi ten czas. Stackoverflow ma istotne pytania:

Ten ostatni zaproponował, aby dodać gem 'rb-readline' do mojego gemfile. I dodaje linię, prowadził bundle install i dostał to:

[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" rozwiązać problem poprzez powiązanie gem do wersji 0.4.2. Miałem 0,5.0.

Dlaczego prosta biblioteka, która ma takie centralne miejsce w Railsach, a także w Ruby, jak sądzę, powoduje tyle bólu? Czy coś się robi, aby to ułatwić?

To tylko biblioteka do czytania linii z konsoli, prawda? Gdzie jest źle w powyższych przykładach? Chciałbym wiedzieć, dlaczego, a nie co i jak.

+2

zgłoś błąd dla rvm (https://github.com/wayneeseguin/rvm/issues) - należy to zrobić instalując odpowiednie biblioteki/nagłówki przez autolibs - ale wymaga trochę debugowania, aby upewnić się działa poprawnie – mpapis

+0

Mam ten sam problem na jednym serwerze, ale nie w drugim. Jedyną różnicą, którą widzę jest wersja 'rbenv'' rbenv 0.4.0-74-g95a039a' działa bez 'rb-readline' klejnot obejścia, a ten z 'rbenv 0.4.0-75-gbe5e1a' nie działa.Dodanie klejnotu 'rb-radline v0.4.2' do mojego Gemfile sprawiło, że sztuczka @ deepender-singla powiedziała. – fguillen

Odpowiedz

5

Można to zrobić i pracował dla mnie:

gem install rb-readline 

i dodaj następujący wiersz do Gemfile Twojego projektu:

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

ja blokowania gem do tej wersji jak wersja zaktualizowana da jakiś błąd.

+0

Dzięki za odpowiedź. Nie przyjmuję tego, ponieważ nie odpowiada, dlaczego nie działa w 0.5 lub jeśli ktoś pracuje nad naprawieniem tego. Moim głównym punktem jest to, że taka biblioteka centralna powinna działać po wyjęciu z pudełka. – toftis

+0

OK, Rozumiem, że myślałem, że możesz to wykorzystać na tyle, że nie wpłynie to na twoją pracę. –

+0

To nie działa dla mnie. :( – Magne

0

Powyższa odpowiedź działa dobrze. Albo zainstalować system gem szeroki

gem install rb-readline 

lub dodając powyższy gem do projektów Gemfile

gem 'rb-readline' 

ale jeśli faceci nie chcą zawierać żadnych dodatkowych perełki w swoim Gemfile i pobrane ruby za pomocą pliku źródłowego wykonaj następujące czynności: -

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 

Użyj sudo, jeśli jest to wymagane :). Mam nadzieję, że to pomoże :)