我想知道如何在運行時編輯金字塔註冊表。那麼我不太確定我需要編輯的東西。動態添加路線到金字塔
我知道我可以用config.include(...)擴展金字塔。但是一旦調用config.make_wsgi_app(),似乎就無法添加路由或新的mako目錄。對threadlocals或設置中的註冊進行的任何更改都不會影響應用程序的行爲。
我的目標是在運行時添加插件。這是一個用例。
有人安裝我的應用程序服務器上運行的金字塔......然後安裝一些插件
PIP安裝page_plugin
然後在/ CONFIGS
有安裝的插件列表中,您可以選擇哪些激活與否。目前我只知道一種方法:
使用entry_points我可以看到我的插件和金字塔的主要功能,我可以註冊插件。使用文件存儲我可以檢查每個插件狀態:[安裝,安裝,卸載,卸載,禁用]
這樣我可以從視圖安裝/卸載我的插件。
爲了看到任何更改,我必須重新啓動服務器。
狀態 安裝:將安裝在安裝下一個啓動 :安裝和積極 卸載:將卸載在卸載下次啓動 :卸載 禁用:不能卸載,但是沒有被激活
安裝/卸載正在使用根據需要設置數據庫
我認爲沒有其他方法可以做到,因爲沒有「remove_view」。我可以讓服務器重新加載。它會加載新的配置。
[編輯]
沒有功能來刪除路由或反基因。所以我的猜測是,對服務器進行重新編碼可能是最簡單和最簡單的方法......重啓服務器可能比忘記從插件中卸載一些東西更清潔。
這真的很有趣,我得看看,我會想出一些結果。 – 2012-03-12 01:38:40
似乎工作得非常好,謝謝,我使用遍歷目前在一個項目上,因爲我使用zodb,它感覺喜歡它真的是唯一合乎邏輯的方式來做到這一點。我有其他的項目,目前定義了自己的路線,但我相信我可以通過遍歷獲得相同的結果。來自塔架我真的習慣了路線,並被遍歷的背後的魔力嚇到了 – 2012-03-14 23:34:46
我仍然只有一個問題,當你說編輯註冊表不是線程安全的。你的意思是,如果兩個人正在編輯註冊表,它會失敗或不幸的是有一些意想不到的結果。 將不得不看看它是如何完成的,但我看到兩種可能性。配置程序複製配置,然後將其推送到註冊表並完全覆蓋它。或者只推送新的或修改的配置。我的猜測是覆蓋。所以如果有人在編輯時進行編輯。這些更改可能永遠不會保存。我現在認爲這不是一件大事,但要記住好。 – 2012-03-14 23:36:37