2012-02-18 14 views
28

Sto cercando di distribuire la mia applicazione Rails per Heroku per verificare il lavoro svolto seguendo queste istruzioni:non può caricare tale file - readline (LoadError) durante l'esecuzione di Heroku creare cedro --stack

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

Ecco il comando che sto cercando di eseguire:

heroku create --stack cedar 

e ricevo questo messaggio di errore:

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

E questo è il contenuto del file in questione:

#-- 
# 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 

posso correre la mia applicazione localmente utilizzando rails -s, ma io proprio non riesco a pubblicarlo a Heroku.

+0

Ho trovato una bella spiegazione del problema scritto dai ragazzi della Guardia. [Link qui] (https://github.com/guard/guard/wiki/Add-Readline-support-to-Ruby-on-Mac-OS-X) se è utile per chiunque. – SRack

risposta

3

Suoni come readline gem sono richiesti dall'applicazione ma non sono specificati nel file Gem. Si prega di provare ad aggiungerlo.

+1

Cosa devo * esattamente * aggiungere al mio Gemfile? Sono nuovo di Rails in generale, questa risposta non è così semplice per me. :) –

+0

Basta aggiungere la riga> gem "readline" iltempo

9

Tale errore di solito si verifica quando il rvm ruby ​​è stato compilato senza estensione readline (che si verifica quando non c'erano intestazioni readline installate prima della compilazione di Ruby). Quindi, provare quanto segue: installare libreadline-dev, quindi reinstallare rubino:

rvm remove 1.9.3 
rvm install 1.9.3 
60

iltempo e risposte di Buru mi hanno aiutato:

sudo apt-get install libreadline-dev 

rvm remove 1.9.3 

rvm install 1.9.3 

Then add to your Gemfile: 

gem 'rb-readline' 
+0

Questo ha funzionato per me. Grazie. –

+6

Non è necessario aggiungere * rb-readline * al file Gem. Avere installato la gemma ('gem install rb-readline') è sufficiente. –

+9

Bene, puoi installare qualsiasi gemma a livello globale sul tuo computer. Questo è quello che abbiamo fatto prima di avere bundler. Ma se lo fai, anche i nuovi sviluppatori sullo stesso progetto devono saperlo fare. E diversi sviluppatori potrebbero finire con disallineamenti di versione. E una gemma globale potrebbe interferire con un altro progetto se stai lavorando su più di un progetto. – davidkovsky

4

Il modo più semplice per installare le dipendenze per Ruby è quello di eseguire:

rvm remove 1.9.3 

E poi

rvm install 1.9.3 

Prima che l'ultimo comando installi effettivamente ruby, ti chiederà di installare le dipendenze. Nel mio caso ho ricevuto questo suggerimento:

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 

Questo dovrebbe essere eseguito in un altro terminale prima di continuare l'installazione.

+0

Questa risposta dovrebbe essere contrassegnata come quella corretta, @ only-bolivan-qui. – jackyalcine

22

ha funzionato per me:

gem install rb-readline 
+0

Ha funzionato come un fascino per me su Ubuntu 12.10 – robabby

+0

Lavorato su Cygwin! – CMCDragonkai

8

ha reso il lavoro per me!

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

Se vi capita di essere utilizzando rbenv su Ubuntu

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

come scritto fino a http://vvv.tobiassjosten.net/ruby/readline-in-ruby-with-rbenv/

+0

Questo ha funzionato per me! Su Debian 7 con un progetto Rails 4.2.3/Refinery 3.0, ricevevo quell'errore per 'RAILS_ENV = staging rails c' e questo l'ha corretto. – natebeaty

4

Questo collegamento si presenta come la prima nella ricerca di Google in modo ho intenzione di chiarire alcuni confusione causata dalla risposta superiore.

La risposta superiore è in realtà due risposte unite in uno. Entrambi risolverebbero il tuo problema da soli, entrambi hanno i loro punti di forza e di debolezza.

Il primo è installare libreadline-dev e ricompilare Ruby.Ciò fa sì che Ruby sia compilato con il supporto per la lettura in C. È potenzialmente più veloce, ma aggiunge un'altra dipendenza C al tuo Ruby e ha il suo set di svantaggi (ad esempio non puoi essere sicuro che la tua distribuzione Linux venga fornita con GNU readline che ha più funzioni ma è su licenza LGPL). Inoltre, non funziona su alcune piattaforme (Windows).

Il secondo è quello di installare rb-readline, inserendolo nel tuo Gemfile o installandolo globalmente (non consigliato in quanto è possibile passare a diverse versioni di Ruby e avere lo stesso problema ancora una volta). Questo è meglio per alcuni perché ora hai un'implementazione pure-Ruby che funziona su ogni piattaforma ma ti richiede di specificarlo in Gemfile (che non dovrebbe essere un grosso problema) ed è potenzialmente più lento. Ad essere onesti non sono riuscito a trovare altri problemi con esso.

La scelta finale è ovviamente la tua, ma se stai eseguendo più progetti o più versioni di Ruby sulla stessa macchina, andrei con l'installazione di libreadline-dev o qualsiasi altra cosa richieda la tua distribuzione, soprattutto perché devi farlo una volta sola e quindi tutti i Rubies appena compilati funzioneranno immediatamente. Ma se stai cercando di eseguire solo questo progetto, usa la piattaforma "strana" (Windows), rb-readline è probabilmente la strada da percorrere.

+0

È arrivato dal primo hit di Google, salvato dalla tua risposta. Ho costruito ruby ​​e rails dal sorgente come utente locale e non ho avuto privilegi su 'apt-get libreadline-dev'. L'aggiunta di 'rb-readline' a Gemfile ha funzionato per me. – swornabsent

Problemi correlati