我被这个问题困住了。我的 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 时,应用程序运行良好。有人可以帮我吗?