我有一個mod_rails服務器,其中足夠奇怪的磁盤空間是溢價。有沒有辦法讓我壓縮我的應用程序的源代碼,如Python's zipimport?從zip壓縮文件加載ruby源文件?
這樣做有明顯的缺點,所以我應該分解並花費在磁盤空間上的鎳,但我認爲這值得一試。
我有一個mod_rails服務器,其中足夠奇怪的磁盤空間是溢價。有沒有辦法讓我壓縮我的應用程序的源代碼,如Python's zipimport?從zip壓縮文件加載ruby源文件?
這樣做有明顯的缺點,所以我應該分解並花費在磁盤空間上的鎳,但我認爲這值得一試。
哦,這是整齊。檢查出rubyzip寶石:
rubyzip還設有 zip/ziprequire.rb模塊(source),其允許 紅寶石加載從拉鍊 檔案紅寶石模塊。
(更新:該ziprequire.rb不再存在於rubyzip寶石,但source鏈接似乎包含它的舊內容仍然)
像現在這樣。這只是從他們的例子稍微修改:
require 'rubygems'
require 'zip/zipfilesystem'
require 'zip/ziprequire'
Zip::ZipFile.open("/tmp/mylib.zip", true) do |zip|
zip.file.open('mylib/somefile.rb', 'w') do |file|
file.puts "def foo"
file.puts " puts 'foo was here'"
file.puts "end"
end
end
$:.unshift '/tmp/mylib.zip'
require 'mylib/somefile'
foo # => foo was here
當然,您不必使用rubyzip庫來創建壓縮庫。您可以使用CLI zip。
require
和load
只是像其他任何方法。你可以取消定義它們,重新定義它們,覆蓋它們,勾住它們,將它們包裹起來做你想做的任何事情。事實上,這正是RubyGems的工作原理。
現在,我不知道是否有人已經爲您實施了這個,但我實際上還記得有關ruby-talk郵件列表的一些討論。
然而,有是的距離,你可以看看在備選地點裝載庫代碼一些例子,也許複製/適應什麼他們這樣做是爲了你的目的:
require
an HTTP URIrequire
加載庫出(加密的)SQLite數據庫而不是文件系統
確實很有趣。它看起來(從快速瀏覽),ziprequire.rb是不存在的。顯然,[有一個問題](https://github.com/rubyzip/rubyzip/issues/51)。 [Here](https://github.com/rubyzip/rubyzip/commit/794c9463fcb2f5a0bd41f4645978e691c66b0ea6)是從「官方」RubyZip回購庫中刪除的實際提交。當然,它仍然可以根據需要添加到您自己的項目中... – 2013-10-10 21:05:17
編輯帖子來達到目的。 – 2013-10-10 21:06:36