17. MY NEEDS
• Minimally Invasive
• do not unpack to a temporary location
• small as can be
• Wide deployment capabilities
• more than linux, mac, windows, cygwin
18. Statically Compile
embedded Ruby
C + ruby extensions
+ main wrapper
+ standard library
Ruby + application code
Crate based application
Pack into Amalgalite
20. Inexact Size Measurements
Executable + C
Ruby libs
extensions
Ruby 1.8.6 2.4 M 8.4 M
Crate/ruby 1.8.6 2.9 M 1.9 M
21. 1 module Kernel
2 # alias the original require away to use later
3 alias :amalgalite_original_require :require
4
5 #
6 # hook into the system 'require' to allow for required text or blobs from an
7 # amalgalite database.
8 #
9 def require( filename )
10 loaded = amalgalite_original_require( filename )
11 rescue LoadError => load_error
12 if load_error.message =~ /#{Regexp.escape filename}z/ then
13 loaded = Amalgalite::Requires.require( filename )
14 else
15 raise load_error
16 end
17 end
18
19 private :require
20 private :amalgalite_original_require
21 end
25. ISSUE #1 - AUTOLOAD
• Problem
• bypasses the require chain setup by amalgalite
• used by rack, active_support, active_record
• Solution
• Port tree style patches?
• custom gem builds?
26. ISSUE #2 - VIEWS IN WEB
FRAMEWORKS
• Problem
• layout and templates loaded from disk
• Solution
• wait for Rails 3
• sinatra, others, make patches for upstream, if needed.
27. ISSUE #3 - CLASS RELOADING
• Problem
• Development mode reloads classes
• Solution ( for now )
• production mode when running as crate based apps