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 型として認識しない理由がわかりません。変数 lower と upper を SQL テーブルから手動で読み取った整数に置き換えると、アプリは正常に動作するため、問題はそれと関係があると確信しています。誰かが私を助けてくれますか?

4

1 に答える 1

1

まず、単語はherokuのデータベースに存在しますか?

次に、大文字と小文字を区別しない LIKE クエリを実行していますか?それとも大文字と小文字を区別するクエリを実行していますか? 後者は何も返さないかもしれません。

第 3 に、レコードがなくてもアプリがクラッシュすることはありません。「レコードが見つかりません」と言うことができるように、空のコレクションをビューに返すだけです。

于 2013-04-23T03:28:29.093 に答える