Tara packs your application into a gzipped TAR archive along with a complete Ruby runtime and all of the necessary gems.
To accomplish this, Tara uses the already packaged Ruby binaries and native gems provided by Phusion's Traveling Ruby project. If you're not familiar with the Traveling Ruby project I encourage you to check out their repo for more information and motivation on why it exists.
tara to your
Gemfile, do a simple
bundle install and you're good to
group :development do gem 'tara' end
Tara uses Bundler to install your gem's dependecies, and without it Tara won't work.
Additionally, if you're using gems with native extensions, Tara needs to be able
to download a precompiled version of those gems.
See Traveling Ruby's tutorial on native extensions
for more information about gems with native extensions and how they work with Traveling Ruby.
Examples of gems with native extensions are
Tara will automatically find gems with native extensions and attempt to download a precompiled version. and in the case that the specific version doesn't exist it'll raise an error and thus refuse to build an archive at all.
Tara is currently intended to be used from code, for example in a
Thor app, or whatever your preference is.
Below is a minimal code example for creating an archive in a Rake task:
task :build do Tara::Archive.new.create end
This will package your application into an archive in
including all gems not in the
By default the created archive will be for Linux x64.
If you want to build it for some other platform, such as Mac OS X, all you have
to do is to pass the
target option to
task :build do Tara::Archive.new(target: 'osx').create end
By default Tara will include all Ruby files in
lib, though it's possible to
override which files that'll be included by passing the
files option with a
list of globs to
One might run into issues when running Bundler while packaging an application,
and it might be related to the global Bundler configuration.
If that is the case then one can choose to ignore the global Bundler
configuration by passing the
Due to how archives are packaged, executables (scripts usually placed in the
bin directory) have to be "wrapped" in yet another script that uses the
packaged Ruby library.
Tara will automatically create wrapper scripts for executables in the
directory, and it'll assume that they are Ruby-only scripts (i.e. not Bash
scripts or whatnot). I'd recommend to use a
#!/usr/bin/env ruby shebang).
Executables placed at the top-level of a repository is currently not supported, as it's far from standard and causes some issues when creating the archive as the wrapper scripts are placed at the top-level of the archive, effectively overwriting the script that they're wrapping.
At this time it is not possible to supply your own wrapper scripts, but it'll most likely be possible in future releases.
Jara is a tool that creates clean artifacts
from Git repositories and publishes them to S3, and Tara includes an
class that is compatible with Jara.
Using Tara with Jara is as simple as:
task :build do archiver = Tara::Archiver.new releaser = Jarå::Releaser.new('production', 'artifact-bucket', archiver: archiver) releaser.release end
Archiver class accepts the same options as the
Archive class does.
© 2015 Mathias Söderberg, see LICENSE.txt (BSD 3-Clause).