Мы раздаем vagrantbox людям, демонстрирующим наш проект. Это сложная задача для установки всей установки для людей, не являющихся ИТ-специалистами. Следующее является доказательством концепции создания самоустанавливающейся бродячей машины.
Для создания коробки вам нужно:
- Джруби установлен
Чтобы запустить окно:
- Вам необходимо установить Virtualbox
- И Java работает на машине
- на компьютерах с операционной системой Windows необходимо соблюдать правила бродячих окон (64-разрядные)
Получить Jruby и все драгоценные камни установлены
$ rvm install jruby $ rvm use jruby $ mkdir shrinkwrap $ cd shrinkwrap $ cat <EOF > Gemfile source 'http://rubygems.org' gem 'vagrant', '0.7.2' gem 'warbler' gem 'sinatra' gem 'jruby-openssl' gem 'jruby-win32ole' EOF $ gem install bundler $ bundle install
Подготовьте бродячий файл
Мы создаем простой vagrantfile, который загружает коробку с Ubuntu
$ mkdir lib $ cat <EOF > lib/Vagrantfile Vagrant::Config.run do |config| config.vm.box = "shrinkwrap" config.vm.box_url = "http://opscode-vagrant-boxes.s3.amazonaws.com/ubuntu10.04-gems.box" config.vm.boot_mode = :gui config.vm.customize do |vm| vm.memory_size = 384 vm.name = "Shrinkwrap" end config.vm.forward_port "http", 80, 9000 end EOF
Добавить Синатра в смесь
Чтобы дать пользователю графический интерфейс для запуска виртуальной машины , мы предоставляем простой URL с помощью sinatra
$ cat <EOF > lib/shrinkwrap.rb #!/usr/bin/env ruby require 'rubygems' require 'sinatra' require 'vagrant' require 'vagrant/cli' require 'pp' class Shrinkwrap < Sinatra::Application get '/up' do body "We do an up" vagrant_dir=File.expand_path(File.dirname(__FILE__)) puts "we are loading the config file" @vagrant_env=Vagrant::Environment.new(:cwd => vagrant_dir) pp @vagrant_env @vagrant_env.load! puts "we are uping the machine, please wait..." Vagrant::CLI.start(["up"], :env => @vagrant_env) body "We are up" end end EOF $ cat <EOF > config.ru require "lib/shrinkwrap" run Shrinkwrap.new EOF
Пакет проекта Синатра с камышевкой
Славка позволяет упаковать проекты sinatra. Он упаковывает версию jruby в warfile, поэтому ему нужна только установленная java.
Чтобы упаковать текущую синатру, просто запустите в каталог, где вы создали файл config.ru
$ warble
должно привести к shrinkwrap.war
Сделать военный файл исполняемым
Следующий шаг — сделать исполняемый файл. Подобно Дженкинсу, мы хотим создать файл войны. Winstone — это инструмент, который делает это возможным
Теперь можно использовать winstone, чтобы сделать боевой файл автономным исполняемым файлом. Для окон нам нужно упаковать «jruby-openssl», «jruby-win32ole», чтобы мы создали файл конфигурации warble.
Мы вставляем наш предыдущий файл create war в jar-файл warbler, сначала распаковывая его, добавляя его как embedded.war и упаковывая обратно.
$ mkdir config $ cat <EOF > config/warble.rb Warbler::Config.new do |config| config.gems += ["jruby-openssl","jruby-win32ole"] end EOF $ wget "http://sourceforge.net/projects/winstone/files/winstone/v0.9.10/winstone-0.9.10.jar/download" $ mkdir extract $ cd extract $ jar -xvf ../winstone-0.9.10.jar $ cp ../shrinkwrap.war embedded.war $ jar cvfm ../ubuntu10-04.jar META-INF/MANIFEST.MF . $ cd ..
Готовы к взлету
Теперь вы можете начать создание нового файла с помощью
$ java -jar ubuntu10-04.jar
И когда вы переходите на http: // localhost: 8080 / up. Он загрузит коробку с S3, и через некоторое время вы увидите раскрутку виртуальной коробки!
Вывод
Точка доказана. Я думаю, что эта концепция имеет большой потенциал, вы просто скачиваете jar и poof, которые выполняются самостоятельно, у вас установлена среда. Смешайте это с рынком для виртуальных машин или поставщиков, упаковывающих демонстрацию своих продуктов.
В двух словах! Будущее здесь ?
Мне было бы интересно услышать, как вы будете использовать эту идею в своей повседневной жизни!
Теперь перейдем к следующей идее!
дальнейшее чтение
- http://winstone.sourceforge.net/#embedding
- http://sourceforge.net/projects/winstone/files/winstone/v0.9.10/winstone-0.9.10.jar/download
- http://thenice.tumblr.com/post/133345213/deploying-a-rails-application-in-tomcat-with-jruby-a
- http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/
- http://vertis.github.com/2010/02/21/sinatra-on-java.html
- http://blog.nicksieger.com/articles/2007/09/04/warbler-a-little-birdie-to-introduce-your-rails-app-to-java