0

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

4

1 回答 1

1

首先,这些词是否存在于heroku的数据库中?

其次,你是在做不区分大小写的 LIKE 查询还是区分大小写的查询?后者可能什么也不返回。

第三,即使没有任何记录,您的应用也不应该崩溃。它应该只向视图返回一个空集合,以便它可以说“未找到记录”。

于 2013-04-23T03:28:29.093 回答