J
Joel VanderWerf
Quoting the README at http://github.com/vjoel/crown/tree/master :
The *crown* program gathers gem lib and bin files under one directory
for fast loading and predictable behavior. For example:
[~/tmp] crown -v mygems json nokogiri sinatra
sinatra-0.9.4
nokogiri-1.3.3
json-1.1.7
rack-1.0.0
PATH=/home/vjoel/tmp/mygems/bin
RUBYLIB=/home/vjoel/tmp/mygems/ext:/home/vjoel/tmp/mygems/ext/json/ext:/home/vjoel/tmp/mygems/lib
The gems are copied under mygems:
[~/tmp] ls mygems
bin ext lib
[~/tmp] ls mygems/lib
action-nokogiri.rb json.rb nokogiri.rb rack.rb sinatra.rb
json nokogiri rack sinatra xsd
The output of 'crown -v' shows you which gems (and versions) it is
gathering, including all dependencies, and it shows you the PATH and
RUBYLIB you need to use those files:
[~/tmp] export RUBYOPT=''
[~/tmp] export
RUBYLIB=/home/vjoel/tmp/mygems/ext:/home/vjoel/tmp/mygems/ext/json/ext:/home/vjoel/tmp/mygems/lib
[~/tmp] ruby -r json -e 'p JSON'
JSON
Why?
* You can stop requiring 'rubygems' and you don't need
RUBYOPT='rubygems'. There are no runtime dependencies on rubygems.
* Lookups for required files should be faster.
* No chance that "gem update" or "gem cleanup" might break your program.
* You can distribute the "crown of gems" with your program.
Features:
* Either symlink files (-s switch) or copy files (the default).
* Include other non-gem files using dest:file syntax.
* Existing files in the target dir are not touched if they are not in
the way.
* Works correctly even with gems that have strange require_path lists,
like json.
* No dirs are ever deleted or replaced.
* A file is written only if either it doesn't already exist in the
target dir or you specify the force (-f) switch.
* The verify (-V) mode checks whether the target dir looks like it has
had the crown command run on it with the given arguments.
* Dry-run (-n) and verbose (-v, -vv) options, as in FileUtils
See the help (-h) for details, license, version, and contact information.
This software is not fully tested on all gems; please test carefully
before using in production environments.
The *crown* program gathers gem lib and bin files under one directory
for fast loading and predictable behavior. For example:
[~/tmp] crown -v mygems json nokogiri sinatra
sinatra-0.9.4
nokogiri-1.3.3
json-1.1.7
rack-1.0.0
PATH=/home/vjoel/tmp/mygems/bin
RUBYLIB=/home/vjoel/tmp/mygems/ext:/home/vjoel/tmp/mygems/ext/json/ext:/home/vjoel/tmp/mygems/lib
The gems are copied under mygems:
[~/tmp] ls mygems
bin ext lib
[~/tmp] ls mygems/lib
action-nokogiri.rb json.rb nokogiri.rb rack.rb sinatra.rb
json nokogiri rack sinatra xsd
The output of 'crown -v' shows you which gems (and versions) it is
gathering, including all dependencies, and it shows you the PATH and
RUBYLIB you need to use those files:
[~/tmp] export RUBYOPT=''
[~/tmp] export
RUBYLIB=/home/vjoel/tmp/mygems/ext:/home/vjoel/tmp/mygems/ext/json/ext:/home/vjoel/tmp/mygems/lib
[~/tmp] ruby -r json -e 'p JSON'
JSON
Why?
* You can stop requiring 'rubygems' and you don't need
RUBYOPT='rubygems'. There are no runtime dependencies on rubygems.
* Lookups for required files should be faster.
* No chance that "gem update" or "gem cleanup" might break your program.
* You can distribute the "crown of gems" with your program.
Features:
* Either symlink files (-s switch) or copy files (the default).
* Include other non-gem files using dest:file syntax.
* Existing files in the target dir are not touched if they are not in
the way.
* Works correctly even with gems that have strange require_path lists,
like json.
* No dirs are ever deleted or replaced.
* A file is written only if either it doesn't already exist in the
target dir or you specify the force (-f) switch.
* The verify (-V) mode checks whether the target dir looks like it has
had the crown command run on it with the given arguments.
* Dry-run (-n) and verbose (-v, -vv) options, as in FileUtils
See the help (-h) for details, license, version, and contact information.
This software is not fully tested on all gems; please test carefully
before using in production environments.