从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邮件列表的一些讨论。
然而,有是的距离,你可以看看在备选地点装载库代码一些例子,也许复制/适应什么他们这样做是为了你的目的:
-
http_require确实非常它听起来像:它允许你
require
an HTTP URI -
Crate是一个Ruby打包工具,它将一个Ruby应用程序打包成一个单一的二进制文件和一对SQLite数据库;它修改
require
加载库出(加密的)SQLite数据库而不是文件系统 - 的,当然我已经提到RubyGems
确实很有趣。它看起来(从快速浏览),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