Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 命名错误-未定义的方法';id';对于nil:部署在Heroku上时使用Sinatra应用程序的NilClass_Ruby_Heroku_Sinatra_Datamapper - Fatal编程技术网

Ruby 命名错误-未定义的方法';id';对于nil:部署在Heroku上时使用Sinatra应用程序的NilClass

Ruby 命名错误-未定义的方法';id';对于nil:部署在Heroku上时使用Sinatra应用程序的NilClass,ruby,heroku,sinatra,datamapper,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}

我被这个问题困住了。我的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识别为类型词。我很确定问题与此有关,因为当我用从SQL表中手动读取的整数替换变量lower和upper时,应用程序运行良好。有人能帮我一下吗?

首先,heroku的数据库里有这些词吗

其次,您是在执行不区分大小写的查询还是区分大小写的查询?后者可能一无所获


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

首先,heroku上的数据库中是否存在这些单词?其次,您是在执行不区分大小写的查询还是区分大小写的查询?后者可能一无所获。第三,即使没有任何记录,你的应用程序也不会崩溃。它应该只向视图返回一个空集合,这样它就可以说“没有找到记录”,感谢您的回答。回答你的问题;是,heroku上的数据库中存在单词。我认为你的第二个回答可能是我问题的线索,因为我甚至没有想到这个查询是区分大小写或不区分大小写的。我认为,如果没有找到任何记录,那么首先就不会访问类Word中的任何方法。我马上去查,你说得对!显然,对SQLite的datamapper查询不区分大小写,而对Postgres的datamapper查询则不区分大小写。非常感谢你!没问题。我会把我的评论变成答案,你会接受的。这样,我的电子阴茎在帮你的同时变大了,:pi感觉到了一种新的情绪。我觉得自己身上沾满了感激之情D