NoMethodError - nil的未定义方法'id':在Heroku上部署时使用Sinatra应用程序的NilClass

时间:2013-04-22 13:52:49

标签: ruby heroku sinatra datamapper

我遇到了这个问题。我的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时,应用程序工作正常。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

首先,在heroku上的数据库中是否存在单词?

其次,您是在进行不区分大小写的LIKE查询还是区分大小写的查询?后者可能什么都不返回。

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