6

RoRアプリケーション(rails 2.3.8、ruby 1.8.7)を実行していますが、アプリケーションはローカルマシンで正常に実行されます。ただし、本番環境では、ログに次のエラーが表示されます。

ActionView::TemplateError (Missing template folder/_file_name.erb in view path app/views) on line #19 of app/views/layouts/main.rhtml:
19:     <%= render :partial => "folder/file_name" -%>

ファイル名はとして存在しますfolder/_file_name.html.erb。本番環境で問題を再現しようとしましたが、うまくいきませんでした。何らかの理由で、railsアプリケーションがfolder/_file_name.erb適切なファイルを検索するときに、要求する場合がありますfolder/_file_name.html.erb

誰かが私に何が起こっているのか説明してもらえますか?

同じことが.rhtmlファイルでも発生し、Railsアプリケーションは時々.erbを要求しますが、他の人は正しい.rhtmlファイルを取得します

アップデート:

<%= render :partial => "shared/meta_tags" -%>
<%= render :partial => "shared/common_resources" -%>
<%= render :partial => 'shared/ads/oas' -%>

事前に感謝します、この問題に関するポインタは役に立ちます

4

3 に答える 3

6

リクエストの形式は何ですか?最初のテンプレート ( folder/_file_name.html.erb) の場合、リクエストの形式が html の場合にのみ正しくなりますが、それが ajax やアプリにあるその他のカスタム タイプの場合は正しくありません。folder/_file_name.erbすべてのフォーマットに同じパーシャルを使用したい場合、簡単な解決策の 1 つは、名前を に変更することです。

于 2011-02-24T09:53:24.703 に答える
5

そのファイルと同じ名前のコントローラー アクションはありますか?

foo コントローラーに bar アクションがあり、アクションに応答が定義されていない場合、Rails は views/foo/bar.html.erb をレンダリングしようとします。

それが望ましくない場合は、コントローラーでレスポンスを定義し、Rails に適切なパーシャルをレンダリングするように指示する必要があります。次のようにします。

respond_to do |format|
   format.html do
       render :partial => "/foo/bar"
   end
end

後者の場合、Rails は「views/foo/_bar.html.erb」をレンダリングします。

于 2011-02-24T18:41:43.340 に答える
3

場合によっては、キャッシュの欠落、不明なリクエスト形式などの負荷の理由があるため、このエラーを防ぐことはできません

次のような事前定義された形式の数を制限することができます。

get '/about-us' => 'controller#about', :format => /(?:|html|json)/

ただし、application_controller.rb ファイルに次のメソッドを追加して、そのようなエラーが画面にエラー メッセージを表示して失敗するのではなく、404 ページをレンダリングするようにしました。

rescue_from ActionView::MissingTemplate, :with => :rescue_not_found
protected
def rescue_not_found
  Rails.logger.warn "Redirect to 404, Error: ActionView::MissingTemplate"
  redirect_to '/404' #or your 404 page
end

このコードをifステートメントでラップできますif Rails.env.production?.envが設定されている場合、このようなもので、開発環境は影響を受けません

于 2015-09-15T22:07:22.963 に答える