2012-06-19 118 views
5

我正在嘗試使用Sinatra,Ruby,rack,haml,pony和SendGrid構建一個應用程序,並使用git和RVM在Heroku上進行部署。該應用程序是一個博客變體,應發送一封電子郵件,並在表單上提交評論。在我的本地服務器上,當表單提交我得到以下錯誤:Rack/Sinatra LoadError:無法加載這樣的文件

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' 

當在Heroku上運行,表單提交導致內部服務器錯誤。該「無法加載這樣的文件」的錯誤提示,該文件是不是寶玉的道路上,但如果我理解正確的話,操作系統不同意:

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

這裏是需要小馬代碼(noobs.rb):

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

# ... 

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

我需要做些什麼才能讓小馬工作?

+0

出於好奇,爲什麼只有當表格發佈時才需要小馬?爲什麼不在應用程序啓動時只需要一次? (我不使用Bundler或Heroku,所以不能告訴你關於你的gem安裝和/或加載庫可能會或可能沒有問題。) – Phrogz

+2

另外,請注意,在Ruby 1.9下,你不需要'require'紅寶石寶石';它是安裝的一部分。在最簡單的應用程序中,在「require」sinatra''之前是否嘗試過只需要'require'pony''? – Phrogz

+0

謝謝你,Phrogz。我原本要求小馬在其他需求的頂部,並將其移至與我見過的例子相匹配的位置。稍後需要它允許應用程序運行,直到發佈帖子。要求'寶石寶石'是試圖手動添加寶石到加載路徑的剩餘部分,我可能沒有做到正確。我應該刪除它。我試圖做一個更簡單的應用程序開始與小馬,它還沒有炸掉,所以也許這將結果。我會公佈結果。 –

回答

11
require "bundler/setup" 

可能會解決您的錯誤。

由於您使用的是Bundler和Sinatra,因此您需要Bundler爲捆綁的寶石工作。你可能會在Bundler和你的寶石之間分配你的寶石。如果你的gemset中有Sinatra和Haml,但你的Gemfile中有Pony,你會看到一個LoadError。

+0

謝謝你,keithcelt! '需要'bundler/setup''修復它。至少現在我已經停止了與削減應用程序的合作。我希望它能夠工作,直到我做了像以前一樣分裂我的寶石的東西。 –

+0

不客氣。如果它適合你,請接受這個答案。 – keithcelt

相關問題