基本上我想要將一個Ruby塊存儲到數據庫中並使用它們。如何在db中存儲ruby塊並使用它們?
有人可能會問爲什麼 - 理由是,我希望我的用戶能夠發佈/上傳代碼塊 - 可以執行這些代碼以獲取他們對我們可能擁有的數據問題的預期結果。
基本上我想要將一個Ruby塊存儲到數據庫中並使用它們。如何在db中存儲ruby塊並使用它們?
有人可能會問爲什麼 - 理由是,我希望我的用戶能夠發佈/上傳代碼塊 - 可以執行這些代碼以獲取他們對我們可能擁有的數據問題的預期結果。
所以你不想存儲紅寶石塊。你想存儲代碼。這很容易。只需將代碼存儲爲字符串即可。然後你可以在eval
那個字符串中有效地執行代碼。
現在,您必須解決一個難題:如何防止用戶發佈惡意代碼(或如何對其進行沙盒)。但是這裏超出了範圍。
首先,將您的代碼存儲爲字符串(ruby2ruby gem可能會對您有所幫助)。當您需要執行此塊時,請從DB中檢索它,並使用「eval」方法
感謝您對Sergio的快速響應。是的 - 我們將在系統提取塊代碼進行評估之前從管理面板批准代碼。 – KannanR
@KannanR,關於安全性,在評論[另一個與eval相關的問題的答案](http://stackoverflow.com/a/14566947/693538)人們建議[RubyCop](https://github.com/envylabs/RubyCop),在你的情況下,它可以通過突出顯示列表中潛在的危險代碼來幫助管理員,所以他們不會錯過它。 – NIA
如果你想[eval](http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-eval)並執行用戶提供的代碼,那麼這是一個好主意一些關於[Ruby Safe Sevels]的調查(http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html)。 –