私はこの問題に悩まされています。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 テーブルから手動で読み取った整数に置き換えると、アプリは正常に動作するため、問題はそれと関係があると確信しています。誰かが私を助けてくれますか?