web-dev-qa-db-fra.com

impossible de charger un tel fichier - readline (LoadError) lors de l'exécution de heroku create --stack cedar

J'essaie de déployer mon Rails application sur Heroku pour le tester en suivant ces instructions:

http://devcenter.heroku.com/articles/Rails3#prerequisites

Voici la commande que j'essaie d'exécuter:

heroku create --stack cedar

Et je reçois ce message d'erreur:

/home/sergio/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- readline (LoadError)
    from /home/sergio/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command/run.rb:1:in `<top (required)>'
    from /home/sergio/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/sergio/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:14:in `block in load'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:13:in `each'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:13:in `load'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/cli.rb:8:in `start'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/gems/heroku-2.20.1/bin/heroku:15:in `<top (required)>'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/bin/heroku:19:in `load'
    from /home/sergio/.rvm/gems/Ruby-1.9.3-p125/bin/heroku:19:in `<main>'

Et voici le contenu du fichier en question:

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

module Kernel

  if defined?(gem_original_require) then
    # Ruby ships with a custom_require, override its require
    remove_method :require
  else
    ##
    # The Kernel#require from before RubyGems was loaded.

    alias gem_original_require require
    private :gem_original_require
  end

  ##
  # When RubyGems is required, Kernel#require is replaced with our own which
  # is capable of loading gems on demand.
  #
  # When you call <tt>require 'x'</tt>, this is what happens:
  # * If the file can be loaded from the existing Ruby loadpath, it
  #   is.
  # * Otherwise, installed gems are searched for a file that matches.
  #   If it's found in gem 'y', that gem is activated (added to the
  #   loadpath).
  #
  # The normal <tt>require</tt> functionality of returning false if
  # that file has already been loaded is preserved.

  def require path
    if Gem.unresolved_deps.empty? then
      gem_original_require path
    else
      spec = Gem::Specification.find { |s|
        s.activated? and s.contains_requirable_file? path
      }

      unless spec then
        found_specs = Gem::Specification.find_in_unresolved path
        unless found_specs.empty? then
          found_specs = [found_specs.last]
        else
          found_specs = Gem::Specification.find_in_unresolved_tree path
        end

        found_specs.each do |found_spec|
          found_spec.activate
        end
      end

      return gem_original_require path
    end
  rescue LoadError => load_error
    if load_error.message.end_with?(path) and Gem.try_activate(path) then
      return gem_original_require(path)
    end

    raise load_error
  end

  private :require

end

Je peux exécuter mon application localement en utilisant Rails -s, mais je n'arrive pas à le publier sur Heroku.

30
Only Bolivian Here

les réponses d'iltempo et de buru m'ont aidé:

Sudo apt-get install libreadline-dev

rvm remove 1.9.3

rvm install 1.9.3

Then add to your Gemfile:

gem 'rb-readline'
61
davidkovsky

A travaillé pour moi:

gem install rb-readline
22
Itay Maman

Une telle erreur se produit généralement lorsque votre rvm Ruby a été compilé sans extension readline (ce qui se produit lorsqu'il n'y avait pas d'en-têtes readline installés avant Ruby). Donc, essayez ce qui suit: installez libreadline-dev, puis réinstallez Ruby:

rvm remove 1.9.3 
rvm install 1.9.3
10
buru

Je l'ai fait fonctionner pour moi!

gem 'rb-readline', "~> 0.5.0.pre.1", :require => false
8
Igor Escobar

Ce lien est le premier de la recherche Google, donc je vais dissiper une certaine confusion causée par la première réponse.

La première réponse est en fait deux réponses fusionnées en une seule. Les deux régleraient votre problème par eux-mêmes, tous deux ont leurs forces et leurs faiblesses.

La première consiste à installer libreadline-dev et recompilez votre Ruby. Cela provoque Ruby à être compilé avec le support de ligne de lecture C. C'est potentiellement plus rapide mais ajoute une autre dépendance C à votre Ruby et a son propre ensemble d'inconvénients (par exemple vous ne pouvez pas être sûr que votre distribution linux est livrée avec GNU readline qui a plus de fonctionnalités mais qui est sous licence LGPL). Il ne fonctionne pas non plus sur certaines plates-formes (Windows).

La seconde consiste à installer rb-readline, soit en le mettant dans votre Gemfile soit en l'installant globalement (non recommandé car vous pouvez passer à une autre Ruby version et avoir à nouveau le même problème). C'est mieux pour certains parce que vous avez maintenant une implémentation pure Ruby qui fonctionne sur chaque plate-forme mais vous oblige à la spécifier dans Gemfile (ce qui ne devrait pas être un gros problème) et est potentiellement plus lente. Pour être honnête, je n'ai pas pu trouver plus de problèmes avec elle.

Le choix final est bien sûr le vôtre, mais si vous exécutez plusieurs projets ou plusieurs versions Ruby sur la même machine, j'irais avec l'installation de libreadline-dev ou tout ce dont votre distribution a besoin, principalement parce que vous n'avez à le faire qu'une seule fois, puis tous les Rubis nouvellement compilés fonctionneront hors de la boîte. Mais si vous essayez d'exécuter ce seul projet, utilisez la plate-forme "bizarre" (Windows), rb-readline est probablement le chemin à parcourir.

5
d4rky

La façon la plus simple d'installer des dépendances pour Ruby est d'exécuter:

rvm remove 1.9.3

Puis

rvm install 1.9.3

Avant que la dernière commande n'installe réellement Ruby, elle vous demandera d'installer les dépendances. Dans mon cas, j'ai eu cette astuce:

Sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison Subversion pkg-config

Cette opération doit être exécutée dans un autre terminal avant de poursuivre l'installation.

4

Si vous utilisez rbenv sur Ubuntu

Sudo apt-get install libreadline-dev
CONFIGURE_OPTS="--with-readline-dir=/usr/include/readline" rbenv install 1.9.3-p125

comme écrit à http://vvv.tobiassjosten.net/Ruby/readline-in-Ruby-with-rbenv/

4
s01ipsist

Cela ressemble à un bijou readline requis par votre application mais non spécifié dans votre Gemfile. Veuillez essayer de l'ajouter.

3
iltempo