2012-06-19 23 views
5

Sto provando a creare un'app utilizzando Sinatra, Ruby, rack, haml, pony e SendGrid, con git e RVM per l'implementazione su Heroku. L'app è una variante del blog che dovrebbe inviare un'e-mail con commenti inviati su un modulo. Sul mio server locale, quando il modulo invia ottengo il seguente errore:Rack/Sinatra LoadError: impossibile caricare tale file

LoadError at/
cannot load such file -- pony 
file: tools.rb location: require line: 314 
BACKTRACE 
(expand) 
/Users/Kevin/prog/ruby/Sinatra/Noobs/noobs.rb in block in <top (required)> 
    require 'pony' 

Quando eseguito su Heroku, risultati invio di moduli in un errore interno del server. L'errore 'non può caricare tale file' suggerisce che il file non si trova sul percorso gemma, ma se ho capito bene, il sistema operativo non è d'accordo:

➜ noobs git:(master) ✗ bundle show pony 
/Users/Kevin/.rvm/gems/[email protected]/gems/pony-1.4 

➜ noobs git:(master) echo $GEM_PATH 
/Users/Kevin/.rvm/gems/[email protected]:/Users/Kevin/.rvm/gems/[email protected] 

Ecco il codice in cui è richiesto di pony (noobs.rb):

require 'rubygems' 
require 'sinatra' 
require 'haml' 
require "sinatra/reloader" if development? 

# ... 

post '/' do 
    require 'pony' 
    Pony.mail(:from => params[:name] + "<" + params[:contact] + ">", 

Cosa devo fare per far funzionare Pony?

+0

Per curiosità, perché dovresti richiedere Pony solo quando il modulo viene pubblicato? Perché non richiedere solo una volta all'avvio dell'app? (Non uso Bundler o Heroku, quindi non posso consigliarti su cosa può o non potrebbe essere sbagliato con l'installazione e/o caricamento della tua gemma.) – Phrogz

+2

Inoltre, sotto Ruby 1.9 non dovresti aver bisogno di 'require' gemme di rubini''; fa parte dell'installazione. Hai provato a mettere solo "require" pony "prima di" richiedere "sinatra" nella più semplice app possibile? – Phrogz

+0

Grazie, Phrogz. Originariamente avevo bisogno del pony in cima con l'altro e lo spostavo per abbinarlo a un esempio che avevo visto. Richiederlo in un secondo momento consente all'app di funzionare finché non viene chiamato il post. La richiesta di 'gemme di rubino' era un residuo dal tentativo di aggiungere manualmente la gemma al percorso di caricamento, cosa che forse non avevo fatto correttamente. Avrei dovuto cancellarlo Sto provando a fare un'app ancora più semplice a partire da Pony e non è ancora esplosa, quindi forse questo darà i suoi frutti. Posterò i risultati –

risposta

11
require "bundler/setup" 

Probabilmente risolverà il tuo errore.

Dato che si utilizza Bundler con Sinatra è necessario richiedere a Bundler che le gemme in bundle funzionino. Probabilmente hai le tue gemme divise tra Bundler e il tuo gemset. Se hai Sinatra e Haml nella tua gemset ma Pony nel tuo Gemfile vedrai un LoadError.

+0

Grazie, keithcelt! 'require "bundler/setup"' risolto. Ho interrotto il lavoro con l'app ridotta almeno per ora. Mi aspetto che avrebbe funzionato fino a quando non ho fatto qualcosa che ha diviso le mie gemme come prima. –

+0

Prego. Accetta questa risposta se ha funzionato per te. – keithcelt

Problemi correlati