我遇到了这个问题。我的Sinatra应用程序中有以下DataMapper模型;
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属性有关,如下所示;
NoMethodError - undefined method 'id' for nil:NilClass:
我知道我正在使用不同的数据库(在开发中; SQLite3和生产中; PostgreSQL)。我很困惑为什么Heroku没有将变量firstword和lastword识别为Word类型。我很确定问题与此有关,因为当我用我的SQL表中手动读取的整数替换变量lower和upper时,应用程序工作正常。有人可以帮帮我吗?
答案 0 :(得分:1)
首先,在heroku上的数据库中是否存在单词?
其次,您是在进行不区分大小写的LIKE查询还是区分大小写的查询?后者可能什么都不返回。
第三,即使没有任何记录,您的应用也不会崩溃。它应该只返回一个空集合到视图,以便它可以说“找不到记录”。