2012-06-19 15 views
5

Próbuję zbudować aplikację za pomocą Sinatra, Ruby, rack, haml, pony i SendGrid, z git i RVM do wdrożenia na Heroku. Aplikacja jest wariantem bloga, który powinien wysłać wiadomość e-mail z komentarzem przesłanym do formularza. Na moim lokalnym serwerem, gdy forma podnosi pojawia się następujący błąd:Rack/Sinatra LoadError: nie można załadować takiego pliku

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' 

po uruchomieniu na Heroku wyniki forma dostarczania informacji w wewnętrznego błędu serwera. W „Nie można wczytać taki plik” błąd wskazuje, że plik nie znajduje się na ścieżce gem, ale jeśli dobrze rozumiem, system operacyjny nie zgadza:

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

Oto kod, gdzie wymagana jest kucyk (noobs.rb):

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

# ... 

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

Co muszę zrobić, aby uzyskać pony do pracy?

+0

Z ciekawości, dlaczego miałbyś potrzebować Pony tylko wtedy, gdy formularz został wysłany? Czemu po prostu nie wymagać tego po uruchomieniu aplikacji? (Nie używam Bundlera ani Heroku, więc nie mogę ci doradzić, co może, ale nie musi być złe w twojej instalacji klejnotów i/lub ładowaniu biblioteki.) – Phrogz

+2

Pamiętaj też, że pod Ruby 1.9 nie powinieneś "wymagać" rubinowe klejnoty "; to część instalacji. Czy próbowałeś użyć 'require 'pony'' przed' require' sinatra'' w najprostszej możliwej aplikacji? – Phrogz

+0

Dziękuję, Phrogz. Pierwotnie potrzebowałem kucyka na górze z innymi wymaganiami i przesunąłem go, by pasował do przykładu, który widziałem. Wymaganie później pozwala na uruchomienie aplikacji do momentu wywołania postu. Wymagane "klejnoty ruby" były pozostałością po próbie ręcznego dodania klejnotu do ścieżki ładowania, co być może nie zrobiłem poprawnie. Powinienem to usunąć. Próbuję zrobić jeszcze prostszą aplikację zaczynającą się od Pony i jeszcze się nie wysadził, więc może to przyniesie owoce. Opublikuję wyniki. –

Odpowiedz

11
require "bundler/setup" 

Prawdopodobnie poprawi Twój błąd.

Ponieważ używasz Bundlera z Sinatrą, musisz wymagać programu Bundler, aby pakiety mogły działać. Prawdopodobnie masz klejnoty podzielone między Bundler i twój gemset. Jeśli masz Sinatrę i Hamla w swoim gemsecie, ale Pony w twoim Gemfile, zobaczysz LoadError.

+0

Dziękuję, keithcelt! 'require' bundler/setup "'naprawił to. Na razie zrezygnowałem z pracy z uproszczoną aplikacją. Spodziewam się, że zadziała, dopóki nie zrobię czegoś, co podzieliłoby moje klejnoty, tak jak poprzednio. –

+0

Nie ma za co. Przyjmij tę odpowiedź, jeśli zadziałało dla Ciebie. – keithcelt

Powiązane problemy