从zip存档加载ruby源?

我有一个mod_rails服务器,奇怪的是,磁盘空间非常宝贵。 有没有办法压缩我的应用程序的源代码,比如Python的zipimport ?

这有明显的缺点,所以我可能只是分解并在磁盘空间上花费镍,但我认为它值得一试。

哦,这很整洁。 查看rubyzip gem:

rubyzip还具有zip / ziprequire.rb模块( 源代码 ),允许ruby从zip存档加载ruby模块。

更新 :rubyzip gem中不再存在ziprequire.rb,但源链接似乎包含其旧内容。)

像这样。 这只是他们的例子稍作修改:

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。

requireload就是其他任何方法。 您可以取消定义它们,重新定义它们,覆盖它们,挂钩它们,将它们包装起来做任何你想做的事情。 事实上,这正是RubyGems的工作原理。

现在,我不知道有人已经为你实现了这个,但我实际上还记得在ruby-talk邮件列表上有关于此的一些讨论。

但是,有一些示例可以从您可以查看的其他位置加载库代码,也可以复制/调整它们为您的目的所做的事情:

  • http_require几乎听起来像它:它允许您require HTTP URI
  • Crate是一个Ruby打包工具,它将Ruby应用程序打包成一个二进制文件和几个SQLite数据库; 它修改了require从(加密的)SQLite数据库而不是文件系统加载库
  • 当然我已经提到了RubyGems