ActionView :: TemplateError (отсутствует шаблон) в ruby ​​on rails - PullRequest
6 голосов
/ 24 февраля 2011

Я запускаю приложение 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, иногда направляет запросы приложений .erb, в то время как другие получают правильный файл .rhtml

Обновление:

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

Любые указатели по этому вопросу будут полезны, заранее спасибо

Ответы [ 3 ]

5 голосов
/ 24 февраля 2011

Есть ли действие контроллера с тем же именем, что и у этого файла?

Если у вас есть контроллер foo с действием bar и в вашем действии не определен ответ, Rails попытается отобразить view / foo / bar.html.erb.

Если это не то, что вам нужно, вам нужно определить ответ в вашем контроллере и указать Rails визуализировать соответствующий фрагмент, например:

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

ВВ последнем случае Rails отобразит «views / foo / _bar.html.erb»

4 голосов
/ 24 февраля 2011

Каков формат запроса ?, для первого шаблона (folder/_file_name.html.erb) он будет корректным только в том случае, если формат запроса html, но не в том случае, если это ajax или любой другой пользовательский тип, используемый в вашем приложении.Одним из быстрых решений было бы переименовать его в folder/_file_name.erb, если вы хотите использовать одно и то же частичное для всех форматов

3 голосов
/ 16 сентября 2015

В некоторых случаях вы не можете предотвратить эту ошибку, так как существуют причины загрузки, такие как отсутствие кэша, неизвестный формат запроса и т. Д.

Вы можете попытаться ограничить количество предопределенных форматов, таких как:

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 настроен так, что ваша среда разработки не будет затронута

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...