capistrano-node-deploy 1.2.1 → 1.2.2
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/VERSION +1 -1
- data/capistrano-node-deploy.gemspec +2 -2
- data/lib/capistrano/node-deploy.rb +30 -33
- metadata +11 -11
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.2
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "capistrano-node-deploy"
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Smith"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-02-27"
|
13
13
|
s.description = "Capistrano recipes for deploying node apps"
|
14
14
|
s.email = "james@loopj.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -2,22 +2,6 @@ require "digest/md5"
|
|
2
2
|
require "railsless-deploy"
|
3
3
|
require "multi_json"
|
4
4
|
|
5
|
-
UPSTART_TEMPLATE = <<EOD
|
6
|
-
#!upstart
|
7
|
-
description "{{application}} node app"
|
8
|
-
author "capistrano"
|
9
|
-
|
10
|
-
start on (filesystem and net-device-up IFACE=lo)
|
11
|
-
stop on shutdown
|
12
|
-
|
13
|
-
respawn
|
14
|
-
respawn limit 99 5
|
15
|
-
|
16
|
-
script
|
17
|
-
cd {{current_path}} && exec sudo -u {{node_user}} NODE_ENV={{node_env}} {{app_environment}} {{node_binary}} {{current_path}}/{{app_command}} 2>> {{shared_path}}/{{node_env}}.err.log 1>> {{shared_path}}/{{node_env}}.out.log
|
18
|
-
end script
|
19
|
-
EOD
|
20
|
-
|
21
5
|
def remote_file_exists?(full_path)
|
22
6
|
'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip
|
23
7
|
end
|
@@ -31,10 +15,6 @@ def remote_file_differs?(full_path, content)
|
|
31
15
|
!exists || exists && !remote_file_content_same_as?(full_path, content)
|
32
16
|
end
|
33
17
|
|
34
|
-
def generate_upstart_config
|
35
|
-
UPSTART_TEMPLATE.gsub(/\{\{(.*?)\}\}/) { eval($1) }
|
36
|
-
end
|
37
|
-
|
38
18
|
Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
39
19
|
before "deploy", "deploy:create_release_dir"
|
40
20
|
before "deploy", "node:check_upstart_config"
|
@@ -43,37 +23,54 @@ Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
|
43
23
|
|
44
24
|
package_json = MultiJson.load(File.open("package.json").read) rescue {}
|
45
25
|
|
46
|
-
|
47
|
-
|
48
|
-
|
26
|
+
_cset :application, package_json["name"]
|
27
|
+
_cset :app_command, package_json["main"] || "index.js"
|
28
|
+
_cset :app_environment, ""
|
49
29
|
|
50
|
-
|
51
|
-
|
52
|
-
|
30
|
+
_cset :node_binary, "/usr/bin/node"
|
31
|
+
_cset :node_env, "production"
|
32
|
+
_cset :node_user, "deploy"
|
33
|
+
|
34
|
+
_cset(:upstart_job_name) { "#{application}-#{node_env}" }
|
35
|
+
_cset(:upstart_file_path) { "/etc/init/#{upstart_job_name}.conf" }
|
36
|
+
_cset(:upstart_file_contents) {
|
37
|
+
<<EOD
|
38
|
+
#!upstart
|
39
|
+
description "#{application} node app"
|
40
|
+
author "capistrano"
|
41
|
+
|
42
|
+
start on (filesystem and net-device-up IFACE=lo)
|
43
|
+
stop on shutdown
|
44
|
+
|
45
|
+
respawn
|
46
|
+
respawn limit 99 5
|
47
|
+
|
48
|
+
script
|
49
|
+
cd #{current_path} && exec sudo -u #{node_user} NODE_ENV=#{node_env} #{app_environment} #{node_binary} #{current_path}/#{app_command} 2>> #{shared_path}/#{node_env}.err.log 1>> #{shared_path}/#{node_env}.out.log
|
50
|
+
end script
|
51
|
+
EOD
|
52
|
+
}
|
53
53
|
|
54
|
-
set :upstart_job_name, lambda { "#{application}-#{node_env}" } unless defined? upstart_job_name
|
55
|
-
set :upstart_file_path, lambda { "/etc/init/#{upstart_job_name}.conf" } unless defined? upstart_file_path
|
56
54
|
|
57
55
|
namespace :node do
|
58
56
|
desc "Check required packages and install if packages are not installed"
|
59
57
|
task :install_packages do
|
60
58
|
run "mkdir -p #{shared_path}/node_modules"
|
61
59
|
run "cp #{release_path}/package.json #{shared_path}"
|
62
|
-
run "cd #{shared_path} && npm install #{(node_env == 'production') ? '--production' : ''}"
|
60
|
+
run "cd #{shared_path} && npm install #{(node_env == 'production') ? '--production' : ''} --loglevel warn"
|
63
61
|
run "ln -s #{shared_path}/node_modules #{release_path}/node_modules"
|
64
62
|
end
|
65
63
|
|
66
64
|
task :check_upstart_config do
|
67
|
-
create_upstart_config if remote_file_differs?(upstart_file_path,
|
65
|
+
create_upstart_config if remote_file_differs?(upstart_file_path, upstart_file_contents)
|
68
66
|
end
|
69
67
|
|
70
68
|
desc "Create upstart script for this node app"
|
71
69
|
task :create_upstart_config do
|
72
|
-
config_file_path = "/etc/init/#{application}.conf"
|
73
70
|
temp_config_file_path = "#{shared_path}/#{application}.conf"
|
74
71
|
|
75
72
|
# Generate and upload the upstart script
|
76
|
-
put
|
73
|
+
put upstart_file_contents, temp_config_file_path
|
77
74
|
|
78
75
|
# Copy the script into place and make executable
|
79
76
|
sudo "cp #{temp_config_file_path} #{upstart_file_path}"
|
@@ -103,4 +100,4 @@ Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
|
103
100
|
run mkdir_commands.unshift(mkdir_releases).join(" && ")
|
104
101
|
end
|
105
102
|
end
|
106
|
-
end
|
103
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-node-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 2
|
10
|
+
version: 1.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Smith
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-02-27 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -29,10 +29,10 @@ dependencies:
|
|
29
29
|
- 0
|
30
30
|
- 2
|
31
31
|
version: 1.0.2
|
32
|
+
type: :runtime
|
32
33
|
version_requirements: *id001
|
33
34
|
name: railsless-deploy
|
34
35
|
prerelease: false
|
35
|
-
type: :runtime
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
none: false
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
- 3
|
46
46
|
- 6
|
47
47
|
version: 1.3.6
|
48
|
+
type: :runtime
|
48
49
|
version_requirements: *id002
|
49
50
|
name: multi_json
|
50
51
|
prerelease: false
|
51
|
-
type: :runtime
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
@@ -59,10 +59,10 @@ dependencies:
|
|
59
59
|
segments:
|
60
60
|
- 0
|
61
61
|
version: "0"
|
62
|
+
type: :development
|
62
63
|
version_requirements: *id003
|
63
64
|
name: shoulda
|
64
65
|
prerelease: false
|
65
|
-
type: :development
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
68
|
none: false
|
@@ -74,10 +74,10 @@ dependencies:
|
|
74
74
|
- 3
|
75
75
|
- 12
|
76
76
|
version: "3.12"
|
77
|
+
type: :development
|
77
78
|
version_requirements: *id004
|
78
79
|
name: rdoc
|
79
80
|
prerelease: false
|
80
|
-
type: :development
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
- 1
|
90
90
|
- 1
|
91
91
|
version: "1.1"
|
92
|
+
type: :development
|
92
93
|
version_requirements: *id005
|
93
94
|
name: bundler
|
94
95
|
prerelease: false
|
95
|
-
type: :development
|
96
96
|
- !ruby/object:Gem::Dependency
|
97
97
|
requirement: &id006 !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
@@ -105,10 +105,10 @@ dependencies:
|
|
105
105
|
- 8
|
106
106
|
- 3
|
107
107
|
version: 1.8.3
|
108
|
+
type: :development
|
108
109
|
version_requirements: *id006
|
109
110
|
name: jeweler
|
110
111
|
prerelease: false
|
111
|
-
type: :development
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
requirement: &id007 !ruby/object:Gem::Requirement
|
114
114
|
none: false
|
@@ -119,10 +119,10 @@ dependencies:
|
|
119
119
|
segments:
|
120
120
|
- 0
|
121
121
|
version: "0"
|
122
|
+
type: :development
|
122
123
|
version_requirements: *id007
|
123
124
|
name: rcov
|
124
125
|
prerelease: false
|
125
|
-
type: :development
|
126
126
|
description: Capistrano recipes for deploying node apps
|
127
127
|
email: james@loopj.com
|
128
128
|
executables: []
|