inploy 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -1,100 +1,163 @@
1
1
  h2. ABOUT:
2
2
 
3
- Inploy is a Rails plugin to deploy applications in a easier way. You can use Inploy from a remote machine or from the local machine, too. It's integrated with Git, Rake and intended to do most of the common work, so you don't need to.
3
+ Inploy was a born as an option to setup and deploy Rails applications in an easier and smarter way.
4
4
 
5
- Actually, Inploy has four rake tasks:
5
+ It executes common tasks like migrate the database, install gems, package the assets, clean the cache, notified Hoptoad, restart the server, etc. automatically. This means you will not have a big deploy script calld 'recipe' like with other tools, only a simple deploy script with a few lines.
6
+
7
+ It uses Git to version the deploys and to pull only the modifications in each one. This means you will not have a lot of folders in the server (only one) with duplicated code and that ech deploy will be very fast.
8
+
9
+ It is very flexible, meaning you can create templates specifing how specific tasks must behave. As today, there are templates for Locaweb and for Rails 3.
10
+
11
+ It works by default with Passenger, but you can specified another servers like Mongrel, Thin and Unicorn.
12
+
13
+ You can execute Inploy from a remote machine or from the server machine, meaning anynone can go to the deployment path and with only one command update the code and execute all the tasks.
14
+
15
+ As Inploy is very flexible, now you can also use it to execute an installation shell script in a server from an URL.
16
+
17
+ h2. INSTALLATION:
18
+
19
+ As a plugin:
20
+
21
+ <pre><code>script/plugin install git://github.com/dcrec1/inploy.git</code></pre>
22
+
23
+ As a gem:
24
+
25
+ <pre><code>sudo gem install inploy</code></pre>
26
+
27
+ Please remember that when used as a gem, Inploy should be available in the deploy servers.
28
+
29
+ h2. USAGE
30
+
31
+ When using Inploy with Rake, there are five tasks:
32
+
33
+ * inploy:remote:install from=url
34
+
35
+ - connects to a list of servers and executes the script from url
6
36
 
7
37
  * inploy:remote:setup
8
38
 
9
39
  - connects to a list of servers
10
40
  - clones a git repository
11
- - runs inploy:local:setup
41
+ - executes rake inploy:local:setup
12
42
 
13
- * inploy:remote:update (_alias: inploy:up_)
43
+ * inploy:remote:update or inploy:up
14
44
 
15
45
  - connects to a list of servers
16
- - runs inploy:local:update
46
+ - executes inploy:local:update
47
+
48
+ * inploy:remote:install
49
+
50
+ - connects to a list of servers
51
+ - reads the content of url specified by from=url without downloading the file and executes it
17
52
 
18
53
  * inploy:local:setup
19
54
 
20
- - copies config/*.sample files to config/*
21
- - creates directory tmp/pids
55
+ - creates directories db and tmp/pids
56
+ - copies config/*.sample and config/*.example files to config/*
57
+ - creates the database
22
58
  - executes init.sh file case it exists
59
+ - inits and updates the git submodules
23
60
  - installs gems
24
- - migrates the database for the production environment
25
- - cleans the cache in public/cache
26
- - cleans cached assets in public/assets if jammit is installed
61
+ - migrates the database
62
+ - updates the crontab from Whenever if being used
63
+ - cleans the cache, default tmp/cache
64
+ - cleans cached assets in public/assets if Jammit is installed
27
65
  - parses less files if more:parse tasks exists
28
66
  - package the assets if asset:packager:build_all task exists
29
- - touch tmp/restart.txt
67
+ - notifies Hoptoad about the deploy, specifing the revision, repository and environment
68
+ - notifies NewRelic RPM about the deploy
69
+ - restarts the server
30
70
 
31
71
  * inploy:local:update
32
72
 
33
73
  - pulls the repository
74
+ - inits and updates the git submodules
75
+ - copies config/*.sample and config/*.example files to config/*
34
76
  - installs gems
35
- - migrates the database for the production environment
36
- - cleans the cache directories (default public/cache)
77
+ - migrates the database
78
+ - updates the crontab from Whenever if being used
79
+ - cleans the cache, default tmp/cache
80
+ - cleans cached assets in public/assets if Jammit is installed
37
81
  - parses less files if more:parse tasks exists
38
82
  - package the assets if asset:packager:build_all task exists
39
- - touch tmp/restart.txt
83
+ - notifies Hoptoad about the deploy, specifing the revision, repository and environment
84
+ - notifies NewRelic RPM about the deploy
85
+ - restarts the server
40
86
 
41
- h2. SKIP STEPS
87
+ If you don't want to execute Rake, there are a few shortcuts:
42
88
 
43
- You can skip some steps when running a task, just add "skip_steps" into your rake command line or add "skip_steps" to your deploy.rb to always skip those steps (see "CONFIGURATION" for details).
89
+ inploy = inploy update = rake inploy:remote:update
90
+ inploy install from=url = rake inploy:remote:install from=url
44
91
 
45
- Currently the steps available to skip are:
92
+ When using inploy as a command, it looks first for config/deploy.rb and then for deploy.rb .
46
93
 
47
- - install_gems: skip rake gems:install
48
- - migrate_database: skip rake db:migrate
49
- - clear_cache: skip removing cache directories
94
+ h2. CONFIGURATION
50
95
 
51
- * Usage (params are comma separated):
96
+ Create a config/deploy.rb file and configure it something like this:
52
97
 
53
- <pre><code>rake inploy:remote:update skip_steps=install_gems,migrate_database</code></pre>
98
+ <pre><code>
99
+ application = "signal"
100
+ repository = 'git://github.com/dcrec1/signal.git'
101
+ hosts = ['hooters', 'geni']
54
102
 
55
- h2. INSTALLATION:
103
+ # OPTIONALS
56
104
 
57
- As a plugin:
105
+ before_restarting_server do
106
+ rake "important:task"
107
+ run "important_command"
108
+ end
109
+
110
+ path = '/opt' # default /var/local/apps
111
+ user = 'dcrec1' # default deploy
112
+ ssh_opts = '-A' # default empty
113
+ branch = 'production' # default master
114
+ sudo = true # default false
115
+ cache_dirs = ['public/cache', 'tmp/cache'] # default ['public/cache']
116
+ skip_steps = ['install_gems', 'clear_cache'] # default []
117
+ </code></pre>
58
118
 
59
- <pre><code>script/plugin install git://github.com/dcrec1/inploy.git</code></pre>
119
+ h2. SKIP STEPS
60
120
 
61
- As a gem:
121
+ You can skip some steps when running a Rake task, just add "skip_steps" into your rake command line or add "skip_steps" to your deploy.rb to always skip those steps.
62
122
 
63
- <pre><code>sudo gem install inploy</code></pre>
123
+ Currently the steps available to skip are:
64
124
 
65
- Please remember that when used as a gem, Inploy should be available in the deploy servers.
125
+ - install_gems: skip rake gems:install
126
+ - migrate_database: skip rake db:migrate
127
+ - clear_cache: skip removing cache directories
66
128
 
67
- h2. CONFIGURATION
129
+ * Usage (params are comma separated):
68
130
 
69
- Create a config/deploy.rb file and configure it something like this:
131
+ <pre><code>rake inploy:remote:update skip_steps=install_gems,migrate_database</code></pre>
70
132
 
71
- <pre><code>
72
- deploy.application = "signal"
73
- deploy.repository = 'git://github.com/dcrec1/signal.git'
74
- deploy.user = 'dcrec1'
75
- deploy.hosts = ['hooters', 'geni']
76
- deploy.path = '/opt'
133
+ h2. HOOKS
77
134
 
78
- # OPTIONALS
135
+ Currently the only hook is called before restarting the server. If you need another hook, please fork the project and implemented it or created an issue, it's very easy.
79
136
 
80
- deploy.ssh_opts = '-A' # default empty
81
- deploy.branch = 'production' # default master
82
- deploy.sudo = true # default false
83
- deploy.cache_dirs = ['public/cache', 'tmp/cache'] # default ['public/cache']
137
+ h2. CONTRIBUTORS:
84
138
 
85
- # Use this if you want to skip some steps on update and setup
86
- # Available options: install_gems, migrate_database, clear_cache
87
- # This feature is also available on command line
88
- # eg. rake inploy:update:remote skip_steps=install_gems
139
+ Inploy is brought to you by:
140
+
141
+ * Diego Carrion
142
+ * Douglas Campos
143
+ * Kristopher Murata
144
+ * Vitor Pellegrino
145
+ * Josh Owens
146
+ * Felipe
147
+ * trooster
148
+ * Josef Pospíšil
149
+ * BrunoGrasselli
150
+ * Andy Shen
151
+ * alekenji
152
+ * Erik Dahlstrand
153
+ * Carlos Brando
89
154
 
90
- deploy.skip_steps = ['install_gems', 'clear_cache'] #default none
91
- </code></pre>
92
155
 
93
156
  h2. LICENSE:
94
157
 
95
158
  (The MIT License)
96
159
 
97
- Copyright (c) 2009
160
+ Copyright (c) 2010
98
161
 
99
162
  Permission is hereby granted, free of charge, to any person obtaining
100
163
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
5
5
  require 'spec/rake/spectask'
6
6
 
7
7
  GEM = "inploy"
8
- GEM_VERSION = "1.5.0"
8
+ GEM_VERSION = "1.6.0"
9
9
  SUMMARY = "Rails deployment made easy"
10
10
  AUTHOR = "Diego Carrion"
11
11
  EMAIL = "dc.rec1@gmail.com"
@@ -16,8 +16,8 @@ spec = Gem::Specification.new do |s|
16
16
  s.version = GEM_VERSION
17
17
  s.platform = Gem::Platform::RUBY
18
18
  s.summary = SUMMARY
19
- s.require_paths = ['lib']
20
- s.files = FileList['lib/**/*', '[A-Z]*'].to_a
19
+ s.files = FileList['lib/**/*','bin/*', '[A-Z]*'].to_a
20
+ s.executables << "inploy"
21
21
 
22
22
  s.author = AUTHOR
23
23
  s.email = EMAIL
data/bin/inploy ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'inploy'
5
+ require 'inploy/cli'
6
+
7
+ Inploy::CLI.execute ARGV
data/lib/inploy/cli.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Inploy
2
+ class CLI
3
+ def self.execute(params)
4
+ deploy = Deploy.new
5
+ case params.size
6
+ when 0
7
+ deploy.remote_update
8
+ when 1
9
+ deploy.send "remote_#{params.first}"
10
+ when 2
11
+ deploy.remote_install :from => params.last.sub("from=", "")
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/inploy/deploy.rb CHANGED
@@ -2,15 +2,18 @@ module Inploy
2
2
  class Deploy
3
3
  include Helper
4
4
  include DSL
5
+
5
6
  attr_accessor :repository, :user, :application, :hosts, :path, :ssh_opts, :branch, :environment,
6
- :port, :skip_steps, :cache_dirs
7
+ :port, :skip_steps, :cache_dirs, :sudo
7
8
 
8
9
  def initialize
9
10
  self.server = :passenger
10
- self.cache_dirs ||= ['public/cache']
11
+ @cache_dirs = %w(public/cache)
11
12
  @branch = 'master'
12
13
  @environment = 'production'
13
- @sudo = ''
14
+ @user = "deploy"
15
+ @path = "/var/local/apps"
16
+ configure
14
17
  end
15
18
 
16
19
  def template=(template)
@@ -21,8 +24,14 @@ module Inploy
21
24
  load_module "servers/#{server}"
22
25
  end
23
26
 
24
- def sudo=(value)
25
- @sudo = value.equal?(true) ? 'sudo ' : ''
27
+ def configure
28
+ if file = configuration_file
29
+ deploy = self
30
+ eval file.read
31
+ local_variables.each do |variable|
32
+ send "#{variable}=", eval(variable) rescue nil
33
+ end
34
+ end
26
35
  end
27
36
 
28
37
  def remote_install(opts)
data/lib/inploy/dsl.rb CHANGED
@@ -29,13 +29,17 @@ module Inploy
29
29
  run "ruby #{file} #{opts[:params]}" if File.exists?(file)
30
30
  end
31
31
 
32
+ def sudo_if_should
33
+ @sudo ? 'sudo ' : ''
34
+ end
35
+
32
36
  def run(command, disable_sudo = false)
33
37
  log command
34
38
 
35
39
  if disable_sudo
36
40
  Kernel.system command
37
41
  else
38
- Kernel.system "#{@sudo}#{command}"
42
+ Kernel.system "#{sudo_if_should}#{command}"
39
43
  end
40
44
  end
41
45
 
data/lib/inploy/helper.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  module Inploy
2
2
  module Helper
3
+ def configuration_file
4
+ File.open("config/deploy.rb") rescue File.open("deploy.rb") rescue nil
5
+ end
6
+
3
7
  def skip_step?(step)
4
8
  skip_steps and skip_steps.include?(step)
5
9
  end
@@ -1,6 +1,10 @@
1
1
  module Inploy
2
2
  module Templates
3
3
  module Locaweb
4
+ def self.extended(base)
5
+ base.path = nil
6
+ end
7
+
4
8
  def remote_setup
5
9
  run "rm -Rf #{tmp_path} && git clone . #{tmp_path} && tar czf - #{tmp_path} | ssh #{user}@#{host} 'tar xzfv - -C ~/ && mv ~#{tmp_path} #{path}/ && cd #{application_path} && rake inploy:local:setup'"
6
10
  end
@@ -1,7 +1,6 @@
1
1
  module Inploy
2
2
  module Templates
3
3
  module Rails3
4
-
5
4
  def remote_setup
6
5
  if branch.eql? "master"
7
6
  checkout = ""
@@ -1,15 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
2
2
  require 'inploy'
3
3
 
4
- def deploy
5
- @deploy ||= Inploy::Deploy.new
6
- end
7
-
8
- begin
9
- require "config/deploy.rb"
10
- rescue Exception
11
- end
12
-
4
+ deploy = Inploy::Deploy.new
13
5
 
14
6
  deploy.environment = ENV['environment'] || deploy.environment
15
7
  deploy.skip_steps = ENV['skip_steps'].split(',') unless ENV['skip_steps'].nil?
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 5
7
+ - 6
8
8
  - 0
9
- version: 1.5.0
9
+ version: 1.6.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Diego Carrion
@@ -14,19 +14,20 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-15 00:00:00 -03:00
17
+ date: 2010-04-17 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
21
21
  description:
22
22
  email: dc.rec1@gmail.com
23
- executables: []
24
-
23
+ executables:
24
+ - inploy
25
25
  extensions: []
26
26
 
27
27
  extra_rdoc_files: []
28
28
 
29
29
  files:
30
+ - lib/inploy/cli.rb
30
31
  - lib/inploy/deploy.rb
31
32
  - lib/inploy/dsl.rb
32
33
  - lib/inploy/helper.rb
@@ -38,6 +39,7 @@ files:
38
39
  - lib/inploy/templates/rails3.rb
39
40
  - lib/inploy.rb
40
41
  - lib/tasks/inploy.rake
42
+ - bin/inploy
41
43
  - Rakefile
42
44
  - README.textile
43
45
  has_rdoc: true