web-dev-qa-db-fra.com

Ruby 1.9.2 et Rails 3 ne peut pas ouvrir Rails console

[gkaykck@main 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>'

J'ai installé Rails 3 sur Ruby 1.9.2p136, ce qui est ok je suppose. Mais je ne peux pas démarrer Rails console et cela me donne l'erreur que j'ai copiée. Les applications ont très bien fonctionné avec Ruby 1.8.7 et je n'ai jamais vu une erreur comme celle-ci.

Des idées ce que cela pourrait être?

47
gkaykck

Apparemment, ubuntu et Ruby ne captent pas toujours les dépendances comme elles le devraient.

Depuis le premier coup sur Google (ouais, j'ai cliqué sur ce débordement de pile à la place # 2 avant de vérifier le premier résultat.)

Accédez à la source Ruby et entrez:

Sudo apt-get install libreadline5-dev
cd ext/readline
Ruby extconf.rb
make
Sudo make install

Donc, si vous êtes sur une autre distribution, assurez-vous d'installer readline (source/package), puis exécutez make/install sur extconf à partir de la source. J'ai essayé ce que gkaykck a suggéré, bien sûr, mais j'ai obtenu ceci sans readline déjà sur mon système.

$ 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
49
winfred

Recette pour ceux qui utilisent rvm:

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

Plus de détails à ce sujet sur https://rvm.io/packages/readline/

29
Nikolay Moskvin

Si vous souhaitez une autre solution à ce problème, procédez comme suit.

Sudo apt-get install libreadline6

Ensuite, dans votre fichier gem, ajoutez:

gem 'rb-readline'

Ensuite

bundle install

Et vous devriez être prêt.

11
Philip

Tout d'abord, désinstallez chaque Ruby version que vous avez.

Après cela, affichez les exigences RVM:

rvm requirements

Vous obtiendrez quelque chose comme:

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

Installez toutes les dépendances via apt-get.
Après cette installation Ruby 1.8.7. Cette version est requise si vous prévoyez d'utiliser Ruby 1.9.x
Vous pouvez maintenant installer Ruby 1.9.3:

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

Notez que vous n'avez même pas besoin d'installer le paquet readline via rvm si vous l'aviez installé en utilisant apt-get.

5
pisaruk

Je recommanderais d'utiliser rvm (Ruby Version Manager) pour gérer vos différentes versions de Ruby et basculer entre elles. Il fait un très bon travail de compilation des différentes versions Vous pouvez même créer des fichiers .rvmrc par répertoire pour indiquer à rvm quelle version de Ruby à utiliser dans quel répertoire (ainsi que des ensembles de gemmes par projet si vous le souhaitez!)

5
futuremint

Avec CentOS 6:

Souvenez-vous que nous travaillons à partir du répertoire d'installation Ruby, pour moi c'était:

   /opt/Ruby-1.9.3-p194/ext/readline

Si vous voyez la sortie suivante, alors readline n'est pas installé:

$ 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

Pour installer avec RPM:

yum install readline-devel

Ensuite, construisez-le:

Ruby extconf.rb 
make
Sudo make install
3
nikc

La solution consiste à aller dans le dossier source que vous avez compilé Ruby => ext => readline que

Ruby extconf.rb
make
Sudo make install
1
gkaykck

Ajout dans le Gemfile

gem 'rb-readline'

puis bundle install

a fait l'affaire pour moi

1
Steven Luong C

Si vous utilisez RVM, vous pouvez refaire la lecture. Cela a résolu le problème pour moi. Instructions ici:

aucun fichier à charger - readline (Erreur de chargement)

0
superluminary

utilisez rvm remove pour supprimer tout Ruby installé. faites un "quel Ruby" si vous obtenez toujours quelque chose, vous devez réinstaller rvm puis installer Ruby en utilisant rvm.

0
user2209623