我有一个 mod_rails 服务器,奇怪的是,它的磁盘空间非常宝贵。有没有办法让我压缩我的应用程序的源代码,比如Python 的 zipimport?
这样做有明显的缺点,所以我可能应该崩溃并在磁盘空间上花费一分钱,但我认为值得一试。
我有一个 mod_rails 服务器,奇怪的是,它的磁盘空间非常宝贵。有没有办法让我压缩我的应用程序的源代码,比如Python 的 zipimport?
这样做有明显的缺点,所以我可能应该崩溃并在磁盘空间上花费一分钱,但我认为值得一试。
哦,这很整洁。查看rubyzip gem:
rubyzip 还具有 zip/ziprequire.rb模块(source),它允许 ruby 从 zip 档案中加载 ruby 模块。
(更新: ziprequire.rb 不再存在于 rubyzip gem 中,但源链接似乎仍然包含其旧内容。)
像这样。这只是从他们的示例中略微修改:
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
一个 HTTP URIrequire
为从(加密的)SQLite 数据库而不是文件系统中加载库