从zip存档加载ruby源?

时间:2010-01-15 02:32:57

标签: ruby archive require compression

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

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

2 个答案:

答案 0 :(得分:2)

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

  

ruby​​zip也有特色   允许的zip/ziprequire.rb模块(source)   ruby从拉链加载ruby模块   档案

更新:rubyzip gem中不再存在ziprequire.rb,但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。

答案 1 :(得分:1)

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

现在,我不知道某人是否已经为您实现了此,但我实际上还记得ruby-talk邮件列表中有关此问题的一些讨论。

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

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