0

私のアプリケーションでは、次の2つのルートがあります

get '/' do
   ...
   haml :home
end

get '/:id' do
    @variable = Something.get(params[:id])
    somethingelse = @variable.some_method
    ...
    haml :show
end

shotgunlocalhost:9393(shotgunのデフォルトのアドレスとポート)を使用してアプリケーションを実行すると、すべてが正常に実行されます。つまり、ログにエラーメッセージは表示されません。

サーバーを通常どおりに実行し(シンもインストールされています)、ruby app.rblocalhost:4567にアクセスするとsome_method、NilClass...のメソッド""がないというメッセージが表示されidます。

Sinatraのドキュメントでは、ルートは順序どおりに呼び出されると言われているため、2番目のルートに出くわすことさえありません。私が間違っている?

テストとして、2番目のルートをに変更しました'/:id/show'が、エラーは発生していません。

どちらの場合も(つまり、ショットガンと通常のサーバーの両方で)、Webサイトは完全にレンダリングされました。つまり/、ビューでは正しくhome.hamlであり、show.hamlではありませんでした。したがって、エラーはログファイルにのみ存在していました。真実@variable.some_methodは、ビューで直接呼び出され、ブラウジング中に/からエラーが発生しました/show.haml

何をしますか?このエラーが発生しないようにするためにすべきことはありますか?露骨に無視すべきですか?

編集:出力とコードの関連部分はここで見つけることができます:https ://gist.github.com/4585374

4

2 に答える 2

5

どうやらこれは私がChromeのために抱えていた問題です(https://groups.google.com/forum/?fromgroups=#!topic/nodejs/A415fHudhhMを参照)

Chromeは、favicon.icoに対して適切な応答を受け取らないときはいつでも、別のリクエストを送信しており、これは私のあまりにも一般的なルートと競合します/:id

favicon.icoプロジェクトのルートにあるpublicフォルダーに(空の場合でも)追加すると、この問題が修正されます。これは、ファビコンを要求したときにchromeが200の応答を受け取るようになったためです。Firefoxでは、最初からこのエラーの兆候はありませんでした。

于 2013-01-21T11:52:56.530 に答える
0

末尾にスラッシュを付けずにルートを記述してみてください。(詳細については、Sinatra FAQのこのページを参照してください)

于 2013-01-20T23:08:20.020 に答える