奇妙なことに、ディスクスペースが貴重なmod_railsサーバーがあります。Pythonのzipimportのように、アプリケーションのソースを圧縮する方法はありますか?
これには明らかな欠点があるので、おそらく分解してディスクスペースにニッケルを費やす必要がありますが、試してみる価値があると思いました。
奇妙なことに、ディスクスペースが貴重なmod_railsサーバーがあります。Pythonのzipimportのように、アプリケーションのソースを圧縮する方法はありますか?
これには明らかな欠点があるので、おそらく分解してディスクスペースにニッケルを費やす必要がありますが、試してみる価値があると思いました。
おお、これはすっきり。rubyzipジェムをチェックしてください:
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
もちろん、zip 形式のライブラリを作成するために rubyzip ライブラリを使用する必要はありません。そのために CLI zip を使用できます。
require
load
他のメソッドと同じです。それらを未定義、再定義、オーバーライド、フック、ラップして、必要なことを行うことができます。実際、RubyGems はまさにそのように機能します。
さて、誰かがすでにあなたのためにこれを実装しているかどうかはわかりませんが、実際にはruby -talk メーリングリストでこれに関する議論がいくつかあったことを覚えています。
ただし、別の場所からライブラリコードをロードする例がいくつかあります。これらを参照して、目的に合わせてそれらが行っていることをコピー/適応させることができます。
require
HTTP URIにrequire
ファイルシステムの代わりに (暗号化された) SQLite データベースからライブラリをロードするように変更します。