o2h 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +28 -0
- data/Guardfile +19 -0
- data/README.md +6 -0
- data/Rakefile +6 -0
- data/lib/o2h.rb +28 -0
- data/lib/o2h/recipes.rb +5 -0
- data/lib/o2h/recipes/bluepill.rb +41 -0
- data/lib/o2h/recipes/bundler.rb +1 -0
- data/lib/o2h/recipes/config.rb +11 -0
- data/lib/o2h/recipes/database.rb +64 -0
- data/lib/o2h/recipes/deploy.rb +12 -0
- data/lib/o2h/recipes/git.rb +9 -0
- data/lib/o2h/recipes/host/passenger.rb +11 -0
- data/lib/o2h/recipes/host/static.rb +7 -0
- data/lib/o2h/recipes/rvm.rb +6 -0
- data/lib/o2h/version.rb +3 -0
- data/o2h.gemspec +21 -0
- data/spec/recipes/bluepill_spec.rb +84 -0
- data/spec/recipes/deploy_spec.rb +29 -0
- data/spec/recipes/git_spec.rb +25 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/shared_contexts/capistrano.rb +32 -0
- data/test/Capfile +10 -0
- data/test/Gemfile +3 -0
- data/test/config/deploy.rb +19 -0
- metadata +149 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
gem 'rake'
|
7
|
+
|
8
|
+
gem 'guard'
|
9
|
+
gem 'guard-rspec'
|
10
|
+
gem 'guard-spork'
|
11
|
+
gem 'guard-bundler'
|
12
|
+
|
13
|
+
gem 'ruby-debug', :platforms => :mri_18
|
14
|
+
gem 'ruby-debug19', :platforms => :mri_19
|
15
|
+
end
|
16
|
+
|
17
|
+
group :test do
|
18
|
+
gem 'spork', '>= 0.9.0.rc9', :require => false
|
19
|
+
|
20
|
+
gem 'rspec'
|
21
|
+
|
22
|
+
gem 'capistrano-spec'
|
23
|
+
end
|
24
|
+
|
25
|
+
group :darwin do
|
26
|
+
gem 'rb-fsevent'
|
27
|
+
gem 'growl_notify'
|
28
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
guard 'bundler' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch(/^.+\.gemspec/)
|
4
|
+
end
|
5
|
+
|
6
|
+
guard 'spork' do
|
7
|
+
watch('Gemfile')
|
8
|
+
watch('Gemfile.lock')
|
9
|
+
watch('spec/spec_helper.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
guard 'rspec', :version => 2 do
|
13
|
+
watch(%r{^spec/.+_spec\.rb$})
|
14
|
+
watch(%r{^lib/o2h/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
15
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
16
|
+
watch('spec/spec_helper.rb') { "spec" }
|
17
|
+
end
|
18
|
+
|
19
|
+
|
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/o2h.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module O2h
|
2
|
+
extend self
|
3
|
+
|
4
|
+
autoload :VERSION, 'o2h/version'
|
5
|
+
|
6
|
+
|
7
|
+
def capistrano(required = :require)
|
8
|
+
Capistrano::Configuration.instance(required)
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize!
|
12
|
+
if capistrano(false)
|
13
|
+
app_mode
|
14
|
+
else
|
15
|
+
cap_mode
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def app_mode
|
20
|
+
require 'o2h/recipes'
|
21
|
+
end
|
22
|
+
|
23
|
+
def cap_mode
|
24
|
+
require 'newrelic_rpm'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
O2h.initialize!
|
data/lib/o2h/recipes.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
set :bluepill, "`which system_bluepill`"
|
2
|
+
|
3
|
+
before "deploy:update", "bluepill:stop"
|
4
|
+
after "deploy:update", "bluepill:start"
|
5
|
+
|
6
|
+
namespace :bluepill do
|
7
|
+
|
8
|
+
desc "Stop processes that bluepill is monitoring and quit bluepill"
|
9
|
+
task :quit, :roles => [:app] do
|
10
|
+
sudo "#{fetch(:bluepill)} stop"
|
11
|
+
sudo "#{fetch(:bluepill)} quit"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Stop processes that bluepill is monitoring"
|
15
|
+
task :stop, :roles => [:app] do
|
16
|
+
transaction do
|
17
|
+
on_rollback { start }
|
18
|
+
sudo "#{fetch(:bluepill)} stop; true"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Load bluepill configuration and start it"
|
23
|
+
task :start, :roles => [:app] do
|
24
|
+
app = fetch(:application)
|
25
|
+
cmd = []
|
26
|
+
|
27
|
+
if fetch(:silverlight, false)
|
28
|
+
cmd << fetch(:bluepill_silverlight, %{LM_CONTAINER_NAME=background_jobs LM_TAG_NAMES=background_jobs:bluepill:#{app}})
|
29
|
+
end
|
30
|
+
|
31
|
+
cmd << fetch(:bluepill) << 'load' << File.join(current_path, 'config', 'bluepill', "#{rails_env}.pill")
|
32
|
+
|
33
|
+
sudo cmd.compact.join(" ")
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Prints bluepills monitored processes statuses"
|
37
|
+
task :status, :roles => [:app] do
|
38
|
+
sudo "#{fetch(:bluepill)} status"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/capistrano'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
set(:domain) { abort "You need to set the :domain variable, e.g set :domain 'www.example.com'" }
|
2
|
+
set(:application) { domain.split('.').first } # TODO - find proper 2nd level domain
|
3
|
+
|
4
|
+
set :use_sudo, false
|
5
|
+
set :sudo, 'sudo -n'
|
6
|
+
set :sudo_prompt, ''
|
7
|
+
set :password, ''
|
8
|
+
|
9
|
+
default_run_options[:pty] = true
|
10
|
+
|
11
|
+
ssh_options[:forward_agent] = true
|
@@ -0,0 +1,64 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
|
3
|
+
namespace :db do
|
4
|
+
|
5
|
+
desc <<-DESC
|
6
|
+
Creates the database.yml configuration file in shared path.
|
7
|
+
|
8
|
+
By default, this task uses a template unless a template \
|
9
|
+
called database.yml.erb is found either is :template_dir \
|
10
|
+
or /config/deploy folders. The default template matches \
|
11
|
+
the template for config/database.yml file shipped with Rails.
|
12
|
+
|
13
|
+
When this recipe is loaded, db:setup is automatically configured \
|
14
|
+
to be invoked after deploy:setup. You can skip this task setting \
|
15
|
+
the variable :skip_db_setup to true. This is especially useful \
|
16
|
+
if you are using this recipe in combination with \
|
17
|
+
capistrano-ext/multistaging to avoid multiple db:setup calls \
|
18
|
+
when running deploy:setup for all stages one by one.
|
19
|
+
DESC
|
20
|
+
task :setup, :except => { :no_release => true } do
|
21
|
+
|
22
|
+
default_template = <<-EOF
|
23
|
+
login: &login
|
24
|
+
adapter: postgresql
|
25
|
+
username: #{application}
|
26
|
+
|
27
|
+
production:
|
28
|
+
<<: *login
|
29
|
+
database: #{application}
|
30
|
+
|
31
|
+
development:
|
32
|
+
<<: *login
|
33
|
+
database: #{application}_dev
|
34
|
+
|
35
|
+
test: &test
|
36
|
+
<<: *login
|
37
|
+
database: #{application}_test
|
38
|
+
|
39
|
+
cucumber:
|
40
|
+
<<: *test
|
41
|
+
EOF
|
42
|
+
location = fetch(:template_dir, "config/deploy") + '/database.yml.erb'
|
43
|
+
template = File.file?(location) ? File.read(location) : default_template
|
44
|
+
|
45
|
+
config = ERB.new(template)
|
46
|
+
|
47
|
+
run "mkdir -p #{shared_path}/config"
|
48
|
+
put config.result(binding), "#{shared_path}/config/database.yml"
|
49
|
+
end
|
50
|
+
|
51
|
+
desc <<-DESC
|
52
|
+
[internal] Updates the symlink for database.yml file to the just deployed release.
|
53
|
+
DESC
|
54
|
+
task :symlink, :except => { :no_release => true } do
|
55
|
+
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
after "deploy:setup", "deploy:db:setup" unless fetch(:skip_db_setup, false)
|
61
|
+
after "deploy:finalize_update", "deploy:db:symlink"
|
62
|
+
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
set(:deploy_to) { "/var/www/#{domain}" }
|
2
|
+
set :group, :www
|
3
|
+
|
4
|
+
after :deploy, 'deploy:set_permissions', :roles => :web
|
5
|
+
|
6
|
+
namespace :deploy do
|
7
|
+
task :set_permissions do
|
8
|
+
# Change the owner and group of everything under the
|
9
|
+
# deployment directory to webadmin and apache
|
10
|
+
try_sudo "chgrp -R #{group} #{deploy_to}"
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
|
2
|
+
require "rvm/capistrano" # Load RVM's capistrano plugin.
|
3
|
+
|
4
|
+
set(:rvm_ruby, "ree")
|
5
|
+
set(:rvm_gemset) { fetch(:application) }
|
6
|
+
set(:rvm_ruby_string) { [fetch(:rvm_ruby), fetch(:rvm_gemset)].compact.join('@') }
|
data/lib/o2h/version.rb
ADDED
data/o2h.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/o2h/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Michal Cichra"]
|
6
|
+
gem.email = ["michal@o2h.cz"]
|
7
|
+
gem.description = %q{Collection of recipes and gem dependencies for o2h deployment}
|
8
|
+
gem.summary = gem.description
|
9
|
+
gem.homepage = "http://o2h.cz"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "o2h"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = O2h::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'newrelic_rpm', '~> 3.3.0'
|
19
|
+
gem.add_dependency 'capistrano', '~> 2.9.0'
|
20
|
+
gem.add_dependency 'rvm', '~> 1.9.2'
|
21
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "bluepill" do
|
4
|
+
include_context :capistrano
|
5
|
+
|
6
|
+
it "should have bluepill tasks" do
|
7
|
+
subject.find_task("bluepill:start").should_not be_nil
|
8
|
+
end
|
9
|
+
|
10
|
+
it "performs bluepill:stop before deploy" do
|
11
|
+
subject.should callback('bluepill:stop').before('deploy')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "performs bluepill:start after deploy" do
|
15
|
+
subject.should callback('bluepill:start').after('deploy')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should set :bluepill" do
|
19
|
+
subject[:bluepill].should_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'configured' do
|
23
|
+
|
24
|
+
before {
|
25
|
+
subject.load 'deploy'
|
26
|
+
subject.set :bluepill, "bluepill"
|
27
|
+
subject.set :use_sudo, false
|
28
|
+
subject.set :sudo_prompt, ''
|
29
|
+
subject.set :sudo, 'sudo -n'
|
30
|
+
}
|
31
|
+
|
32
|
+
context "start task" do
|
33
|
+
|
34
|
+
before {
|
35
|
+
subject.set :application, "my-app"
|
36
|
+
subject.set :current_path, "current-path"
|
37
|
+
subject.set :rails_env, 'my-env'
|
38
|
+
}
|
39
|
+
|
40
|
+
it "runs bluepill command" do
|
41
|
+
subject.execute_task(task)
|
42
|
+
subject.should have_run("#{subject.sudo} bluepill load current-path/config/bluepill/my-env.pill")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "runs bluepill command in with silverlight env" do
|
46
|
+
subject.set :silverlight, true
|
47
|
+
subject.execute_task(task)
|
48
|
+
env = "LM_CONTAINER_NAME=background_jobs LM_TAG_NAMES=background_jobs:bluepill:#{subject.application}"
|
49
|
+
subject.should have_run("#{subject.sudo} #{env} bluepill load current-path/config/bluepill/my-env.pill")
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'status task' do
|
55
|
+
it "runs status command" do
|
56
|
+
subject.execute_task(task)
|
57
|
+
subject.should have_run("#{subject.sudo} bluepill status")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'stop task' do
|
62
|
+
it "runs status command" do
|
63
|
+
subject.execute_task(task)
|
64
|
+
subject.should have_run("#{subject.sudo} bluepill stop; true")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'quit task' do
|
69
|
+
it "runs status command" do
|
70
|
+
subject.execute_task(task)
|
71
|
+
subject.should have_run("#{subject.sudo} bluepill stop")
|
72
|
+
subject.should have_run("#{subject.sudo} bluepill quit")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "assings rollback" do
|
76
|
+
pending 'no way how to check rollback requests during transaction'
|
77
|
+
subject.execute_task(task)
|
78
|
+
subject.rollback_requests
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "deploy" do
|
4
|
+
include_context :capistrano
|
5
|
+
|
6
|
+
context "domain my-domain.com" do
|
7
|
+
before {
|
8
|
+
subject.set :domain, 'my-domain.com'
|
9
|
+
}
|
10
|
+
|
11
|
+
its(:deploy_to) { should == '/var/www/my-domain.com' }
|
12
|
+
its(:group) { should == :www }
|
13
|
+
|
14
|
+
it "performs set_permissions after deploy" do
|
15
|
+
subject.should callback('deploy:set_permissions').after('deploy')
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'set_permissions task' do
|
19
|
+
|
20
|
+
it "changes permissions of deploy directory" do
|
21
|
+
subject.load 'deploy'
|
22
|
+
subject.set :group, 'my-group'
|
23
|
+
subject.set :use_sudo, false
|
24
|
+
subject.execute_task(task)
|
25
|
+
subject.should have_run("chgrp -R my-group #{subject.fetch(:deploy_to)}")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "git" do
|
4
|
+
include_context :capistrano
|
5
|
+
|
6
|
+
its(:scm) { should == :git }
|
7
|
+
its(:branch) { should == :master }
|
8
|
+
its(:deploy_via) { should == :remote_cache }
|
9
|
+
its(:git_shallow_clone) { should == true }
|
10
|
+
its(:git_enable_submodules) { should == true }
|
11
|
+
|
12
|
+
context 'without application set' do
|
13
|
+
it 'call to repository should abort' do
|
14
|
+
subject.set(:application) { raise "Not defined" }
|
15
|
+
expect { subject[:repository] }.to raise_error("Not defined")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with application set' do
|
20
|
+
it "should set proper repository" do
|
21
|
+
subject.set(:application, 'my-app')
|
22
|
+
subject.repository == 'git.o2h.cz:my-app'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spork'
|
2
|
+
|
3
|
+
Spork.prefork do
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'pathname'
|
7
|
+
require 'capistrano'
|
8
|
+
|
9
|
+
#Bundler.require :default, :test
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
# some (optional) config here
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
Spork.each_run do
|
18
|
+
|
19
|
+
Dir[Pathname.pwd.join(*%w{spec support ** *.rb}).expand_path].each do |file|
|
20
|
+
require file
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'capistrano'
|
2
|
+
require 'capistrano-spec'
|
3
|
+
|
4
|
+
shared_context :capistrano do
|
5
|
+
include Capistrano::Spec::Matchers
|
6
|
+
|
7
|
+
let(:capistrano) { Capistrano::Configuration.new }
|
8
|
+
let(:recipe_name) { self.class.top_level_description }
|
9
|
+
let(:recipe_path) { recipe(recipe_name) }
|
10
|
+
|
11
|
+
let(:task) do
|
12
|
+
task = self.class.ancestors.map do |example|
|
13
|
+
break $1 if /^(.+?) task$/ =~ example.description
|
14
|
+
end
|
15
|
+
|
16
|
+
if task
|
17
|
+
task = "#{recipe_name}:#{task}"
|
18
|
+
subject.find_task(task) or raise "Task #{task} not found"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
subject { capistrano }
|
23
|
+
|
24
|
+
before do
|
25
|
+
capistrano.extend Capistrano::Spec::ConfigurationExtension
|
26
|
+
capistrano.load recipe_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def recipe name
|
30
|
+
"lib/o2h/recipes/#{name}"
|
31
|
+
end
|
32
|
+
end
|
data/test/Capfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'o2h/recipes'
|
2
|
+
|
3
|
+
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
|
4
|
+
|
5
|
+
# Uncomment if you are using Rails' asset pipeline
|
6
|
+
# load 'deploy/assets'
|
7
|
+
|
8
|
+
Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
|
9
|
+
|
10
|
+
load 'config/deploy' # remove this line to skip loading any of the default tasks
|
data/test/Gemfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
set :domain, 'mydomain.cz'
|
2
|
+
|
3
|
+
server self[:domain], :app, :web, :db, :primary => true
|
4
|
+
|
5
|
+
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
|
6
|
+
|
7
|
+
role :web, "your web-server here" # Your HTTP server, Apache/etc
|
8
|
+
role :app, "your app-server here" # This may be the same as your `Web` server
|
9
|
+
role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run
|
10
|
+
role :db, "your slave db-server here"
|
11
|
+
|
12
|
+
# if you're still using the script/reaper helper you will need
|
13
|
+
# these http://github.com/rails/irs_process_scripts
|
14
|
+
|
15
|
+
# If you are using Passenger mod_rails uncomment this:
|
16
|
+
# namespace :deploy do
|
17
|
+
#
|
18
|
+
# task :stop do ; end#
|
19
|
+
# end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: o2h
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1889055196096400351
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Michal Cichra
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-16 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: newrelic_rpm
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 1510912537727578012
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 3
|
33
|
+
- 0
|
34
|
+
version: 3.3.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: capistrano
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 1156501143490752456
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 9
|
49
|
+
- 0
|
50
|
+
version: 2.9.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rvm
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 2853305934664562034
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 9
|
65
|
+
- 2
|
66
|
+
version: 1.9.2
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
description: Collection of recipes and gem dependencies for o2h deployment
|
70
|
+
email:
|
71
|
+
- michal@o2h.cz
|
72
|
+
executables: []
|
73
|
+
|
74
|
+
extensions: []
|
75
|
+
|
76
|
+
extra_rdoc_files: []
|
77
|
+
|
78
|
+
files:
|
79
|
+
- .gitignore
|
80
|
+
- .rspec
|
81
|
+
- .travis.yml
|
82
|
+
- Gemfile
|
83
|
+
- Guardfile
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- lib/o2h.rb
|
87
|
+
- lib/o2h/recipes.rb
|
88
|
+
- lib/o2h/recipes/bluepill.rb
|
89
|
+
- lib/o2h/recipes/bundler.rb
|
90
|
+
- lib/o2h/recipes/config.rb
|
91
|
+
- lib/o2h/recipes/database.rb
|
92
|
+
- lib/o2h/recipes/deploy.rb
|
93
|
+
- lib/o2h/recipes/git.rb
|
94
|
+
- lib/o2h/recipes/host/passenger.rb
|
95
|
+
- lib/o2h/recipes/host/static.rb
|
96
|
+
- lib/o2h/recipes/rvm.rb
|
97
|
+
- lib/o2h/version.rb
|
98
|
+
- o2h.gemspec
|
99
|
+
- spec/recipes/bluepill_spec.rb
|
100
|
+
- spec/recipes/deploy_spec.rb
|
101
|
+
- spec/recipes/git_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
103
|
+
- spec/support/shared_contexts/capistrano.rb
|
104
|
+
- test/Capfile
|
105
|
+
- test/Gemfile
|
106
|
+
- test/config/deploy.rb
|
107
|
+
has_rdoc: true
|
108
|
+
homepage: http://o2h.cz
|
109
|
+
licenses: []
|
110
|
+
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 2002549777813010636
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
hash: 2002549777813010636
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
requirements: []
|
135
|
+
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 1.5.2
|
138
|
+
signing_key:
|
139
|
+
specification_version: 3
|
140
|
+
summary: Collection of recipes and gem dependencies for o2h deployment
|
141
|
+
test_files:
|
142
|
+
- spec/recipes/bluepill_spec.rb
|
143
|
+
- spec/recipes/deploy_spec.rb
|
144
|
+
- spec/recipes/git_spec.rb
|
145
|
+
- spec/spec_helper.rb
|
146
|
+
- spec/support/shared_contexts/capistrano.rb
|
147
|
+
- test/Capfile
|
148
|
+
- test/Gemfile
|
149
|
+
- test/config/deploy.rb
|