Pregunta

Tengo un filtro de rastrillo que estoy usando para generar HTML a partir de Markdown (y hacer otras cosas irrelevantes para la pregunta.

Estoy generando archivos desde mi fuente,. Freeure Arches (en Filelist DOCUMENTS), en mi directorio de salida OUTPUT como html. Yo tengo un htmlfile Método para ensamblar y escribir mi archivo HTML.

Estoy probando dos opciones alternativas aquí:

Tareas de archivo:

DOCUMENTS.each do |doc|
  file doc.pathmap("#{OUTPUT}/%X.html") => doc do |t|
    htmlfile t.name, RDiscount.new(F.read doc).to_html, t.name.pathmap('%n')
  end
end

Tareas de archivo sintetizadas con una regla:

rule '.html' => proc {|html| html.pathmap("%{#{OUTPUT}/,}X.feature")} do |t|
  htmlfile t.name, RDiscount.new(F.read t.source).to_html, t.name.pathmap('%n')
end

Entiendo que la última opción sintetizaría tareas de archivo y tendría el mismo efecto neto. Sin embargo, encuentro que si lo elijo, no hace frente a la construcción incremental, mientras que la primera opción sí.

Si construyo, luego modifique un archivo, luego ejecute RAKE -Trace Obtengo lo siguiente:

Con tareas sintetizadas:

** Invoke output/Module/Feature.html (first_time, not_needed)
** Invoke output/Module (not_needed)

Y con las tareas de archivo explícitas:

** Invoke output/Module/Feature.html (first_time)
** Invoke output/Module (not_needed)
** Invoke Module/Feature.feature (first_time, not_needed)
** Execute output/Module/Feature.html

Esta opción está claramente revisando el archivo de origen. Pensé que vincular la salida y la fuente era exactamente qué regla

¿Fue útil?

Solución

(Creo que es más útil poner la respuesta como una respuesta real, en lugar de un comentario. Ver https://meta.stackexchange.com/questions/68507/what--do-if-you-find-the-answer-to-your-ocestion)

Resulta que si tienes file outdoc => something En otra parte de su archivo de rastrillo, se meterá con las tareas sintetizadas. Mientras que si tiene tareas de archivo para esos documentos de salida, se suma a los requisitos previos y funciona bien. Este tipo de tiene sentido; Las tareas sintetizadas realmente no existen.

También descubrí que las reglas solo funcionan a un nivel de inferencia ( http://onestepback.org/articles/buildingwithrake/rulelimitations.html) aunque esa no resultó ser la respuesta.

Solución: reorganice los requisitos previos de las tareas, o use las tareas de archivo explícitas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top