【发布时间】:2011-01-05 08:38:00
【问题描述】:
我有一个 mod_rails 服务器,奇怪的是,它的磁盘空间非常宝贵。有没有办法让我压缩我的应用程序的源代码,比如Python's zipimport?
这有明显的缺点,所以我可能应该崩溃并在磁盘空间上花一分钱,但我认为值得一试。
【问题讨论】:
标签: ruby archive require compression
我有一个 mod_rails 服务器,奇怪的是,它的磁盘空间非常宝贵。有没有办法让我压缩我的应用程序的源代码,比如Python's zipimport?
这有明显的缺点,所以我可能应该崩溃并在磁盘空间上花一分钱,但我认为值得一试。
【问题讨论】:
标签: ruby archive require compression
哦,这很整洁。查看rubyzip gem:
rubyzip 还具有 zip/ziprequire.rb 模块 (source) 允许 ruby 从 zip 加载 ruby 模块 档案。
(更新:ziprequire.rb 不再存在于rubyzip gem 中,但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 URI
require 以从(加密的)SQLite 数据库而不是文件系统中加载库【讨论】: