Your SlideShare is downloading. ×
0
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Crate  Packaging Standalone Ruby Applications
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Crate Packaging Standalone Ruby Applications

1,628

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,628
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CRATE Packaging Standalone Ruby Applications Jeremy Hinegardner jeremy@copiousfreetime.org @copiousfreetime
  • 2. COPIOUS FREE TIME Fedora Ruby Packaging Gems •beanstalkd •amalgalite •haproxy •crate •libtomcrypt •keybox •libtommath •launchy •nginx •heel •ragel •hitimes •tinyproxy •htauth •rabal •stickler
  • 3. Crate & Amalgalite
  • 4. SURVEY
  • 5. PRE HISTORY RubyConf 2007 (Charlotte, NC) • Sploitin’ with Ruby • Aaron Bedra • Deploying Ruby Runtimes • Bruce Williams & Rich Kilmer
  • 6. STORYTIME
  • 7. PERL 4, 1993
  • 8. NO CONTROL • interpreters? - perl probably, python maybe, ruby most likely not • what libraries? - openssl? zlib? • compiler? - quite possibly not
  • 9. What do you do, when only thing you know about your deployment location, is the Operating System?
  • 10. AND YOU LOVE RUBY.
  • 11. YOU MAKE CRATE.
  • 12. SO WHAT IS CRATE?
  • 13. embedded Ruby + ruby extensions + main wrapper + standard library + application code Crate based application
  • 14. RUBYSCRIPT2EXE ?
  • 15. http://www.erikveen.dds.nl/rubyscript2exe Ruby Application rubylib exe Extension dlls gems sitelib application.exe eee.exe eee.gz trailer
  • 16. MY NEEDS • Minimally Invasive • do not unpack to a temporary location • small as can be • Wide deployment capabilities • more than linux, mac, windows, cygwin
  • 17. Statically Compile embedded Ruby C + ruby extensions + main wrapper + standard library Ruby + application code Crate based application Pack into Amalgalite
  • 18. 1 CREATE TABLE rubylibs ( 2       id            INTEGER PRIMARY KEY AUTOINCREMENT, 3       filename      TEXT UNIQUE, 4       compressed    BOOLEAN, 5       contents      BLOB 6       );
  • 19. 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
  • 20.  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
  • 21. Amalgalite ruby driver is bootstrapped in its C extension
  • 22. DEMO
  • 23. BOOTSTRAPPING
  • 24. 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?
  • 25. 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.
  • 26. ISSUE #3 - CLASS RELOADING • Problem • Development mode reloads classes • Solution ( for now ) • production mode when running as crate based apps
  • 27. ISSUE #4 - NOT WINDOWS FRIENDLY ( YET )
  • 28. QUESTIONS?

×