从ZIP档案加载红宝石源?(Loading ruby source from a zip archi

2019-09-29 02:59发布

我有一个mod_rails所在服务器的磁盘空间,奇怪的是,在一个溢价。 有我的方式来压缩我的应用程序的源代码,像Python的Zipimport一起 ?

有明显的缺点,以这一点,所以我也许应该就坏了,花的磁盘空间镍,但我想这将会是值得一试。

Answer 1:

哦,这是整齐的。 退房rubyzip宝石:

rubyzip还设有拉链/ ziprequire.rb模块( 源 ),其允许红宝石从拉链档案加载红宝石模块。

更新 :ziprequire.rb是在rubyzip宝石不再存在,但源链接似乎包含它的旧内容仍然)。

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

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的邮政编码为这一点。



Answer 2:

requireload就像任何其他的方法。 你可以取消定义它们,重新定义它们,覆盖它们,勾他们,包裹他们做任何你想要的。 事实上,这正是了RubyGems是如何工作的。

现在,我不知道是否有人对你已经实现了这一点,但实际上我记得这个在一些讨论ruby-talk上的邮件列表。

不过,也从,你可以看看,也许复制/适应他们在做什么,你的目的的备选地点装载库代码的一些例子:

  • http_require确实差不多就是它听起来像:它可以让你require的HTTP URI
  • 箱是一个Ruby包装工具哪些包Ruby应用程序到一个单一的二进制和一对夫妇SQLite数据库的; 它修改require加载库出(加密的)SQLite数据库而不是文件系统的
  • 当然我已经提到了RubyGems


文章来源: Loading ruby source from a zip archive?