我被這個問題困住了。我在我的Sinatra應用程序中有以下DataMapper模型;NoMethodError - 未定義方法'id'爲零:在Heroku上部署Sinatra應用時的NilClass
class Word
include DataMapper::Resource
property :id, Serial, :key => true
property :word, String
end
以下是我的代碼的另一個片段;
get '/kamus/:alph' do
@alph = %w{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
firstword = Word.first(:word.like=>"#{params[:alph]}%")
lower = firstword.id
lastword = Word.last(:word.like=>"#{params[:alph]}%")
upper = lastword.id
@words = Word.all(:id=>(lower..(lower+(upper-lower)%1000)))
erb :kamus
end
我遇到的問題是;在當地的開發環境中,一切正常。但是當我在Sinatra上部署時,我得到了臭名昭着的「內部服務器錯誤」。在我的命令行中輸入;
heroku logs
我發現問題與id屬性有關,如下所示;我知道我正在使用不同的數據庫(在開發; SQLite3和生產; PostgreSQL中)。我對Heroku爲什麼不能識別變量首字和尾字作爲Word類型感到困惑。我很確定這個問題與此有關,因爲當我使用從我的SQL表中手動讀取的整數替換變量lower和upper時,該應用程序工作正常。有人可以幫我嗎?
首先,數據庫中的單詞是否存在於heroku中?其次,你是在做一個不區分大小寫的LIKE查詢或區分大小寫的查詢嗎?後者可能什麼都不會返回。第三,即使沒有任何記錄,你的應用程序也不應該崩潰。它應該只是返回一個空的集合到視圖,以便它可以說「找不到記錄」 – 2013-04-22 14:05:41
感謝您的回答。對你的問題; yesku數據庫中存在單詞heroku。我認爲你的第二個迴應可能是我的問題的線索,因爲我甚至沒有想到查詢是區分大小寫的或不區分大小寫的。我認爲如果沒有找到記錄,首先就不會有類Word中的方法被訪問。我馬上檢查一下。 – amirothman 2013-04-22 21:57:37
你是對的!顯然,對SQLite的數據映射器查詢不區分大小寫,並且對Postgres IS的數據映射器查詢也是如此。非常感謝你! – amirothman 2013-04-22 22:14:39