나는 디스크 공간이 충분하지 않은 mod_rails 서버를 가지고있다. Python's zipimport처럼 내 응용 프로그램 소스를 압축 할 수있는 방법이 있습니까?Zip 아카이브에서 루비 소스를로드 중입니까?
명백한 단점이 있기 때문에 디스크 공간에 니켈을 분해하여 사용하는 것이 좋지만 한 번 사용해 볼 가치가 있다고 생각했습니다.
나는 디스크 공간이 충분하지 않은 mod_rails 서버를 가지고있다. Python's zipimport처럼 내 응용 프로그램 소스를 압축 할 수있는 방법이 있습니까?Zip 아카이브에서 루비 소스를로드 중입니까?
명백한 단점이 있기 때문에 디스크 공간에 니켈을 분해하여 사용하는 것이 좋지만 한 번 사용해 볼 가치가 있다고 생각했습니다.
RubyGems 아,이 깔끔 언급했다. 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 메일 링리스트에서 이에 대한 토론을 기억하고 있습니다.
그러나, 는 당신이 볼 수있는 다른 위치에서로드 라이브러리 코드의 몇 가지 예들이있다, 어쩌면 복사/가 당신의 목적을 위해 무엇을하고 있는지에 적응 : 거의
require
an HTTP URIrequire
가 파일 시스템
실제로 흥미 롭습니다. ziprequire.rb는 더 이상 존재하지 않습니다. 분명히 [문제가 있습니다] (https://github.com/rubyzip/rubyzip/issues/51). [Here] (https://github.com/rubyzip/rubyzip/commit/794c9463fcb2f5a0bd41f4645978e691c66b0ea6)는 "공식적인"RubyZip 저장소에서 제거 된 실제 커밋입니다. 물론, 필요에 따라 자신의 프로젝트에 추가 될 수 있습니다 ... –
이 게시물 avail에 편집 됨. –