Crate - Packaging Standalone Ruby Applications

50 %
50 %
Information about Crate - Packaging Standalone Ruby Applications
Technology

Published on May 5, 2009

Author: copiousfreetime

Source: slideshare.net

Description

This is the version of my Create talk I gave at Railsconf 2009.

Sometimes the best solution is a standalone application that you can give to a client or customer to just drop on a machine and run. Maybe it is a web service, or a desktop data entry application, or mass deployed background agent, or you have no control of the deployment environment. In any case, there are situations where deploying a full ruby stack may not be an option.

This talk will cover the Crate project and how it may be used to package your application, be it commandline, server, or web application. The end result is a statically built, standalone executable of the ruby interpreter and all dependent binary extensions. The application code, ruby stdlib, dependent gems, and other assets are packed into one or more SQLite databases.

CRATE Packaging Standalone Ruby Applications Jeremy Hinegardner jeremy@copiousfreetime.org @copiousfreetime

COPIOUS FREE TIME Fedora Ruby Packaging Gems •beanstalkd •amalgalite •haproxy •crate •libtomcrypt •keybox •libtommath •launchy •nginx •heel •ragel •hitimes •tinyproxy •htauth •rabal •stickler

Crate & Amalgalite

SURVEY

PRE HISTORY RubyConf 2007 (Charlotte, NC)

PRE HISTORY RubyConf 2007 (Charlotte, NC) • Sploitin’ with Ruby • Aaron Bedra

PRE HISTORY RubyConf 2007 (Charlotte, NC) • Sploitin’ with Ruby • Aaron Bedra • Deploying Ruby Runtimes • Bruce Williams & Rich Kilmer

STORYTIME

PERL 4, 1993

NO CONTROL

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

NO CONTROL • interpreters? - perl probably, python maybe, ruby most likely not • what libraries? - openssl? zlib?

NO CONTROL • interpreters? - perl probably, python maybe, ruby most likely not • what libraries? - openssl? zlib? • compiler? - quite possibly not

What do you do, when only thing you know about your deployment location, is the Operating System?

AND YOU LOVE RUBY.

YOU MAKE CRATE.

SO WHAT IS CRATE?

embedded Ruby

embedded Ruby + ruby extensions

embedded Ruby + ruby extensions + main wrapper

embedded Ruby + ruby extensions + main wrapper + standard library

embedded Ruby + ruby extensions + main wrapper + standard library + application code

embedded Ruby + ruby extensions + main wrapper + standard library + application code Crate based application

RUBYSCRIPT2EXE ?

http://www.erikveen.dds.nl/rubyscript2exe Ruby Application rubylib exe Extension dlls gems sitelib application.exe eee.exe eee.gz trailer

MY NEEDS

MY NEEDS • Minimally Invasive • do not unpack to a temporary location • small as can be

MY NEEDS • Minimally Invasive • do not unpack to a temporary location • small as can be • Wide deployment capabilities • more than linux, mac, windows, cygwin

embedded Ruby + ruby extensions + main wrapper + standard library + application code Crate based application

embedded Ruby C + ruby extensions + main wrapper + standard library + application code Crate based application

embedded Ruby C + ruby extensions + main wrapper + standard library Ruby + application code Crate based application

Statically Compile embedded Ruby C + ruby extensions + main wrapper + standard library Ruby + application code Crate based application

Statically Compile embedded Ruby C + ruby extensions + main wrapper + standard library Ruby + application code Crate based application Amalgalite

Statically Compile embedded Ruby C + ruby extensions + main wrapper + standard library Ruby + application code Crate based application Pack into Amalgalite

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

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

 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

Amalgalite ruby driver is bootstrapped in its C extension

DEMO

BOOTSTRAPPING

ISSUE #1 - AUTOLOAD

ISSUE #1 - AUTOLOAD • Problem • bypasses the require chain setup by amalgalite • used by rack, active_support, active_record

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?

ISSUE #2 - VIEWS IN WEB FRAMEWORKS

ISSUE #2 - VIEWS IN WEB FRAMEWORKS • Problem • layout and templates loaded from disk

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.

ISSUE #3 - CLASS RELOADING • Problem • Development mode reloads classes • Solution ( for now ) • production mode when running as crate based apps

ISSUE #4 - NOT WINDOWS FRIENDLY ( YET )

QUESTIONS?

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Crate: Packaging Standalone Ruby Applications : RailsConf ...

Sometimes the best solution is a standalone application that you can give to a client or customer to just drop on a machine and run. This talk will cover ...
Read more

Packaging an Application With Crate - Copious Free Time

Packaging an Application With Crate ... do the building of our standalone htpassword-ruby application. ... Packing ruby standard lib into /Users ...
Read more

RubyConf 2008: Crate – packaging your ruby application ...

Behind Crate is the idea that a standalone ruby application can be formed into a simple installable application to just drop on a machine and run.
Read more

duskhacker/ruby_on_skis: Template for coding wxRuby ...

... Template for coding wxRuby applications and packaging them into standalone programs for distribution. ruby_on_skis ... to package your Ruby application ...
Read more

Spooner/releasy: A rake task generator to help with ...

... building/packaging/deploying Ruby applications ... your application's Rakefile, Releasy can ... to create an installer for the application.
Read more

Standalone | LinkedIn

View 87138 Standalone posts, presentations, experts, and more. Get the professional knowledge you need on LinkedIn. LinkedIn Home What is LinkedIn?
Read more

The Ruby Toolbox - Packaging to Executables

Releasy helps to make Ruby application releases simpler, by creating and archiving source folders, Windows folders, standalone executables, installers and ...
Read more

Distributing Rails Applications - A Tutorial

Distributing Rails Applications ... about packing and distributing Rails applications with ... Rails application; Create the RBA (= Ruby ...
Read more