2012-06-19 38 views
5

Estoy tratando de crear una aplicación con Sinatra, Ruby, rack, haml, pony y SendGrid, con git y RVM para su implementación en Heroku. La aplicación es una variante de blog que debe enviar un correo electrónico con comentarios enviados en un formulario. En mi servidor local, cuando la forma se somete me sale el siguiente error:Rack/Sinatra LoadError: no se puede cargar dicho archivo

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' 

Cuando se ejecuta en Heroku, el envío de formularios resultados en un error interno del servidor. El error 'no se puede cargar existe el fichero' indica que el archivo no está en la ruta de la gema, pero si he entendido bien, el sistema operativo no está de acuerdo:

➜ 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] 

Este es el código que se requiere de caballo (noobs.rb):

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

# ... 

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

¿Qué debo hacer para que pony funcione?

+0

Por curiosidad, ¿por qué necesitarías Pony solo cuando se publique el formulario? ¿Por qué no solo lo requiere una vez al inicio de la aplicación? (No uso Bundler o Heroku, por lo que no puedo aconsejarle sobre lo que puede o no ser incorrecto con su instalación de gema y/o biblioteca de carga.) – Phrogz

+2

Además, tenga en cuenta que bajo Ruby 1.9 no debería necesitar 'requerir ' rubíes gemas''; es parte de la instalación. ¿Has intentado poner 'require 'pony'' antes de' require' sinatra'' en la aplicación más simple posible? – Phrogz

+0

Gracias, Phrogz. Originalmente requirí pony en la parte superior con el otro requiere, y lo moví para que coincida con un ejemplo que había visto. Requirirlo más tarde permite que la aplicación se ejecute hasta que se llame a la publicación. El requerimiento de "gemas de rubí" fue un remanente de tratar de agregar manualmente la gema a la ruta de carga, lo que puede que no haya hecho correctamente. Debería haberlo borrado Estoy tratando de hacer una aplicación aún más simple comenzando con Pony y aún no ha explotado, así que tal vez eso dará sus frutos. Publicaré los resultados. –

Respuesta

11
require "bundler/setup" 

Probablemente solucione el error.

Dado que está utilizando Bundler con Sinatra, necesita requerir Bundler para que las gemas incluidas funcionen. Probablemente tienes tus gemas divididas entre Bundler y tu gemset. Si tiene Sinatra y Haml en su gemset pero Pony en su Gemfile, verá un LoadError.

+0

Gracias, keithcelt! 'require' bundler/setup "'lo solucionó. Dejé de trabajar con la aplicación simplificada al menos por ahora. Espero que hubiera funcionado hasta que hice algo que dividiera mis gemas como antes. –

+0

De nada. Por favor acepte esta respuesta si funcionó para usted. – keithcelt

Cuestiones relacionadas