2012-08-25 33 views
2

我正在寫一個plugin,它定義了一個新的Jekyll塊ditaa。應將塊中的任何內容從Ditaa markup轉換爲圖像文件,並將該圖像插入到帖子中而不是塊中。生成文件可以工作,但是當複製到_site目錄中或生成時,該文件顯然會被刪除。如何從Jekyll中的液體塊生成文件?

是否有適當/更好的方法來實現生成自定義資產的塊插件?

回答

1

我已經找到了正確的解決使用Jekyll::StaticFile類。

當您將此類的一個對象添加到site.static_files陣列中時,您將此文件標記爲在渲染過程完成後複製待處理。實際上,這些文件的副本在site.write過程中完成。看看你的Jekyll安裝中的site_process.rb文件。

該課程的用法很簡單。當您需要標記爲未來的副本里的文件,只需執行這樣的代碼:

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename) 

pathfilename取決於src文件夾文件的位置。

我有一個類似的問題開發乳液 - > PNG液體標籤。你可以看看我的代碼在GitHub:https://github.com/fgalindo/jekyll-liquid-latex-plugin

+0

非常感謝。你是否設法在源碼樹之外生成文件(例如'/ tmp')並使用'StaticFile'從那裏獲取文件? – matthias

+0

不,我把生成的文件保存在'src'裏面。我複製結構:'src/res/latex' <->'site/res/latex'。這有助於保持生成文件的緩存。如果該文件已經存在,則不需要重新編譯。該插件刪除所有臨時和過時的文件(孤立的)。看看我的代碼,如果你喜歡,或者讓我與你合作,通過拉取請求來改善它,那就去抓取清理程序。事實上,我發現'ditaa'謝謝你的問題,並且一見鍾情。 –

+0

感謝您的澄清,我實際上不希望將生成的數據保留在源代碼樹中,因爲它受版本控制。但是,檢查它是否已經被複制到'_site'應該是可能的,對吧?您可以自由發出拉請求;-) P.S .:我會更新您接受的答案,因爲它確實是適當的解決方案。 – matthias

1

我還沒有找到正確的方法來做到這一點,但一個工作。該解決方案可在GitHub上找到,並使用Jekylls能力將任何前綴不帶下劃線的內容複製到_site目錄。但是,這種方法也具有兩個缺點:

  1. 的「源」目錄獲取與自動生成的文件
  2. 沒有自動再生部署污染是一個有點尷尬,因爲後傑基爾已經複製生成的圖像全部文件。所以第二次Jekyll運行是必要的。
1

我找到了答案。

替換此

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename) 

gnufile = GNUplotFile.new(site, site.source, "_site/media/", "#{@file}") 
gnufile.givemethecommands commands 
site.static_files << gnufile 

,並創建一個GNUplotFile類,在清理過程之後繼承傑基爾:: StaticFile

class GNUplotFile < Jekyll::StaticFile 
    def write(dest) 
    puts "WRITE---->>>>>>>>>>>" 
    #File.write('_site/media/BTTTTT.svg', DateTime.now) 
    gnuplot(@commands) 
    # do nothing 
    end 
    def gnuplot(commands) 
    IO.popen("gnuplot", "w") { |io| io.puts commands } 
    end 
    def givemethecommands(commands) 
    @commands = commands 
    end 
end 

寫命令運行。我只是有一個Liquid塊和上面的代碼。