對于博客,我將一個行內標簽放在一起,該標簽從指定的網頁中提取標題資訊。它可以作業,但我需要添加快取,這樣我就不會進行冗余的網路呼叫。
我想要一個比重新啟動服務器并等待重建更緊湊的除錯周期,而是將插件作為 Ruby 代碼報告運行uninitialized constant Liquid (NameError)。這是有道理的,因為它不是required,也不會運行,因為插件只是一個類定義。
所以,我嘗試創建一些腳手架來運行代碼,或者我認為的腳手架,無論如何。
require 'liquid'
require_relative '../_plugins/header.rb'
ht = HeaderInlineTag.new
ht.initialize 'header', 'some path'
puts ht.render()
這產生...
_test/header.rb:4:in `<main>': private method `new' called for HeaderInlineTag:Class (NoMethodError)
考慮到initialize()可能會運行來創建物件,我將前兩行代碼合并,但這也不起作用。相同的錯誤,不同的函式名稱。該插件不會將任何內容標記為private,并且宣告方法public不會改變任何內容。
在不攜帶整個博客的情況下測驗插件還需要什么?
uj5u.com熱心網友回復:
解決方案超出了我的 Ruby 知識范圍,但大多數情況下都很簡單,一旦我連接了四處飄蕩的資訊片段。
首先,這個現有答案是關于處理 Rails 的特定問題,但順便顯示了如何處理私有new方法:通過呼叫它們send,如HeaderInlineTag.send :new.
然后,這個間接呼叫.new()now(當然)呼叫.initialize(),這意味著它需要任何插件都需要的三個引數。兩個引數用于測驗本身,所以它們很容易。第三個是決議背景關系。關于撰寫 Jekyll 插件的檔案永遠不會清楚決議背景關系實際上是什么,因為它是作為構建程序的一部分自動發送的。然而,一些研究和測驗Liquid::ParseContext成為罪魁禍首。
最后,.render()還ParseContext取值。
因此,測驗腳手架應該看起來像這樣。
require 'liquid'
require_relative '../_plugins/header.rb'
context = Liquid::ParseContext.new
ht = GithubInlineTag.send :new, 'header', 'some path...', context
puts ht.render context
我可以從我的博客的根檔案夾中呼叫ruby -rliquid _test/header.rb它,并列印結果。我現在可以更新此腳本以從命令列或 CSV 檔案中提取引數,具體取決于所需的測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418356.html
標籤:
上一篇:我怎樣才能完成填充陣列?
