2011-02-24 9 views
6

estoy ejecutando una aplicación RoR (carriles 2.3.8, 1.8.7 rubí), la aplicación se ejecuta bien en mi máquina local. sino en la producción de los registros muestran el siguiente error:ActionView :: TemplateError (plantilla Missing) en Ruby on Rails

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" -%> 

existe el nombre de archivo como folder/_file_name.html.erb, traté de reproducir el problema en el entorno de producción, pero no teníamos un poco de suerte, por alguna razón los carriles solicitud pide folder/_file_name.erb en algún veces, mientras que otras veces busca el archivo correcto folder/_file_name.html.erb.

Podría alguien explicarme qué está pasando?

Lo mismo ocurre también para los archivos .rhtml, carriles solicitudes de aplicación .erb a veces, mientras que otros reciben el derecho .rhtml archivo

actualización:

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

Cualquier punteros sobre esta cuestión ser útil, gracias de antemano

+0

Por favor, mostrar el código donde se hace referencia a su parcial. Parece que hay un problema allí. – Dty

Respuesta

4

¿Cuál es el formato de la solicitud ?, para la primera plantilla (folder/_file_name.html.erb) solo será correcto si el formato de solicitud es html, pero no si es ajax o cualquier otro tipo personalizado que tengas en tu aplicación. Una solución rápida sería cambiarle el nombre a folder/_file_name.erb si desea utilizar el mismo parcial para todos los formatos

+0

Todos los archivos se solicitan a través de la solicitud http no xhr, tengo más de 100 archivos para cambiar el nombre. También causará algunos otros problemas, así que si no hay otra forma, estaré condenado por algún tiempo en la oficina. – wael34218

+0

Hah cierto ... así que asegúrate en los registros que cuando los errores suceden, la solicitud tiene en la primera línea 'AS HTML'.También incluir el código que representa el parcial sería útil para descartar otras posibilidades –

+0

Probablemente se produce un error en una solicitud xhr que intentará mostrar la página de error que representa algunos parciales. – wael34218

5

¿Hay una acción del controlador con el mismo nombre que ese archivo?

Si tiene un controlador foo con una acción de bar y no hay respuesta definida en su acción, Rails tratar de hacer ver/foo/bar.html.erb.

Si eso no es lo que desea es, es necesario definir una respuesta en su controlador y decirle a los carriles para hacer que el parcial apropiada, así:

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

En este último caso, los carriles rendirá "puntos de vista/foo/_bar.html.erb"

3

En algunos casos no se puede evitar este error, ya que hay razones de carga como caché faltante, el formato de solicitud desconocido y etc

Usted puede tratar de restringir el número de formatos predefinidos como:

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

Sin embargo, he añadido el siguiente método en mi archivo application_controller.rb de forma que tales errores serán representar una página 404 en lugar fallar con un mensaje de error en la pantalla

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 

se puede envolver el código en una if, algo como esto if Rails.env.production? dado que el env está configurado para que su entorno de desarrollo suele verse afectada