crate packaging standalone ruby applications

29
CRATE Packaging Standalone Ruby Applications Jeremy Hinegardner [email protected] @copiousfreetime

Upload: railsconf

Post on 15-May-2015

1.623 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Crate  Packaging Standalone Ruby Applications

CRATEPackaging Standalone Ruby Applications

Jeremy Hinegardner

[email protected] @copiousfreetime

Page 2: Crate  Packaging Standalone Ruby Applications

COPIOUS FREE TIME

Fedora Packaging

•beanstalkd•haproxy•libtomcrypt•libtommath•nginx•ragel•tinyproxy

Ruby Gems

•amalgalite•crate•keybox•launchy•heel•hitimes•htauth•rabal•stickler

Page 3: Crate  Packaging Standalone Ruby Applications

Crate&

Amalgalite

Page 4: Crate  Packaging Standalone Ruby Applications

SURVEY

Page 5: Crate  Packaging Standalone Ruby Applications

PRE HISTORYRubyConf 2007 (Charlotte, NC)

• Sploitin’ with Ruby

• Aaron Bedra

• Deploying Ruby Runtimes

• Bruce Williams & Rich Kilmer

Page 6: Crate  Packaging Standalone Ruby Applications

STORYTIME

Page 7: Crate  Packaging Standalone Ruby Applications

PERL 4, 1993

Page 8: Crate  Packaging Standalone Ruby Applications

NO CONTROL

• interpreters? - perl probably, python maybe, ruby most likely not

• what libraries? - openssl? zlib?

• compiler? - quite possibly not

Page 9: Crate  Packaging Standalone Ruby Applications

What do you do, when only thing you know about your

deployment location, is the Operating System?

Page 10: Crate  Packaging Standalone Ruby Applications

AND YOU LOVE RUBY.

Page 11: Crate  Packaging Standalone Ruby Applications

YOU MAKE CRATE.

Page 12: Crate  Packaging Standalone Ruby Applications

SO WHAT IS CRATE?

Page 13: Crate  Packaging Standalone Ruby Applications

embedded Ruby

+ standard library+ main wrapper

+ application codeCrate based application

+ ruby extensions

Page 14: Crate  Packaging Standalone Ruby Applications

RUBYSCRIPT2EXE ?

Page 15: Crate  Packaging Standalone Ruby Applications

http://www.erikveen.dds.nl/rubyscript2exe

eee.exe trailereee.gz

application.exe

exe rubylib

dlls

Ruby

sitelib

Extension

gems

Application

Page 16: Crate  Packaging Standalone Ruby Applications
Page 17: Crate  Packaging Standalone Ruby Applications

MY NEEDS

• Minimally Invasive

• do not unpack to a temporary location

• small as can be

• Wide deployment capabilities

• more than linux, mac, windows, cygwin

Page 18: Crate  Packaging Standalone Ruby Applications

CRuby

Statically Compile

Pack into Amalgalite

embedded Ruby

+ standard library+ main wrapper

+ application codeCrate based application

+ ruby extensions

Page 19: Crate  Packaging Standalone Ruby Applications

1 CREATE TABLE rubylibs (2       id            INTEGER PRIMARY KEY AUTOINCREMENT,3       filename      TEXT UNIQUE,4       compressed    BOOLEAN,5       contents      BLOB6       );

Page 20: Crate  Packaging Standalone Ruby Applications

Executable + C extensions

Ruby libs

Ruby 1.8.6

Crate/ruby 1.8.6

2.4 M 8.4 M

2.9 M 1.9 M

Inexact Size Measurements

Page 21: Crate  Packaging Standalone Ruby Applications

 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_error12     if load_error.message =~ /#{Regexp.escape filename}\z/ then13       loaded = Amalgalite::Requires.require( filename )14     else15       raise load_error16     end17   end18 19   private :require20   private :amalgalite_original_require21 end

Page 22: Crate  Packaging Standalone Ruby Applications

Amalgalite ruby driver is bootstrapped in its C extension

Page 23: Crate  Packaging Standalone Ruby Applications

DEMO

Page 24: Crate  Packaging Standalone Ruby Applications

BOOTSTRAPPING

Page 25: Crate  Packaging Standalone Ruby Applications

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?

Page 26: Crate  Packaging Standalone Ruby Applications

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.

Page 27: Crate  Packaging Standalone Ruby Applications

ISSUE #3 - CLASS RELOADING

• Problem

• Development mode reloads classes

• Solution ( for now )

• production mode when running as crate based apps

Page 28: Crate  Packaging Standalone Ruby Applications

ISSUE #4 - NOT WINDOWS FRIENDLY ( YET )

Page 29: Crate  Packaging Standalone Ruby Applications

QUESTIONS?