conjure 0.2.10 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +8 -0
- data/README.md +35 -76
- data/lib/conjure.rb +1 -12
- data/lib/conjure/delayed_job.rb +39 -0
- data/lib/conjure/digital_ocean/droplet.rb +5 -2
- data/lib/conjure/docker/host.rb +75 -0
- data/lib/conjure/docker/template.rb +71 -0
- data/lib/conjure/instance.rb +31 -76
- data/lib/conjure/passenger.rb +123 -0
- data/lib/conjure/postgres.rb +67 -0
- data/lib/conjure/rails_application.rb +32 -0
- data/lib/conjure/server.rb +41 -0
- data/lib/conjure/swap.rb +28 -0
- data/lib/conjure/{provision/templates → templates}/application-no-ssl.conf.erb +2 -1
- data/lib/conjure/{provision/templates → templates}/application-ssl.conf.erb +2 -1
- data/lib/conjure/version.rb +1 -1
- metadata +12 -41
- data/lib/conjure/application.rb +0 -35
- data/lib/conjure/command.rb +0 -74
- data/lib/conjure/command_target.rb +0 -25
- data/lib/conjure/config.rb +0 -44
- data/lib/conjure/data_set.rb +0 -7
- data/lib/conjure/identity.rb +0 -25
- data/lib/conjure/log.rb +0 -26
- data/lib/conjure/provider.rb +0 -26
- data/lib/conjure/provision.rb +0 -1
- data/lib/conjure/provision/docker/host.rb +0 -32
- data/lib/conjure/provision/docker/image.rb +0 -55
- data/lib/conjure/provision/docker/template.rb +0 -55
- data/lib/conjure/provision/instance.rb +0 -52
- data/lib/conjure/provision/local_docker.rb +0 -16
- data/lib/conjure/provision/passenger.rb +0 -111
- data/lib/conjure/provision/postgres.rb +0 -70
- data/lib/conjure/provision/server.rb +0 -78
- data/lib/conjure/service/cloud_server.rb +0 -112
- data/lib/conjure/service/database.rb +0 -25
- data/lib/conjure/service/database/mysql.rb +0 -69
- data/lib/conjure/service/database/postgres.rb +0 -77
- data/lib/conjure/service/digital_ocean_account.rb +0 -31
- data/lib/conjure/service/docker_host.rb +0 -259
- data/lib/conjure/service/docker_shell.rb +0 -46
- data/lib/conjure/service/forwarded_shell.rb +0 -25
- data/lib/conjure/service/rails_codebase.rb +0 -67
- data/lib/conjure/service/rails_console.rb +0 -10
- data/lib/conjure/service/rails_log_view.rb +0 -14
- data/lib/conjure/service/rails_server.rb +0 -91
- data/lib/conjure/service/rake_task.rb +0 -11
- data/lib/conjure/service/remote_file_set.rb +0 -24
- data/lib/conjure/service/remote_shell.rb +0 -73
- data/lib/conjure/service/repository_link.rb +0 -52
- data/lib/conjure/service/volume.rb +0 -28
- data/lib/conjure/target.rb +0 -19
- data/lib/conjure/view/application_view.rb +0 -42
- data/lib/conjure/view/table_view.rb +0 -38
@@ -0,0 +1,123 @@
|
|
1
|
+
require "conjure/docker/template"
|
2
|
+
require "erubis"
|
3
|
+
require "securerandom"
|
4
|
+
|
5
|
+
module Conjure
|
6
|
+
class Passenger
|
7
|
+
def initialize(container_host, options)
|
8
|
+
@container_host = container_host
|
9
|
+
@database = options[:database]
|
10
|
+
@rails_env = options[:rails_env] || "staging"
|
11
|
+
@max_upload_mb = options[:max_upload_mb] || 20
|
12
|
+
@system_packages = options[:system_packages] || []
|
13
|
+
@ruby_version = options[:ruby_version] || "2.2"
|
14
|
+
@rubygems_version = options[:rubygems_version]
|
15
|
+
@use_ssl = !!options[:ssl_hostname]
|
16
|
+
@ssl_hostname = options[:ssl_hostname] || "unknown"
|
17
|
+
@services = options[:services] || []
|
18
|
+
@system_packages += ["libsqlite3-dev", "libpq-dev"]
|
19
|
+
@system_packages += ["libruby#{@ruby_version}", "ruby#{@ruby_version}"]
|
20
|
+
@system_packages += @services.flat_map(&:system_packages)
|
21
|
+
end
|
22
|
+
|
23
|
+
def install
|
24
|
+
server_template.start(@container_host, "/sbin/my_init", start_options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def pending_files
|
28
|
+
return [] unless @use_ssl
|
29
|
+
[
|
30
|
+
"/etc/ssl/certs/application.crt",
|
31
|
+
"/etc/ssl/certs/root_and_intermediates.crt",
|
32
|
+
"/etc/ssl/private/application.key",
|
33
|
+
"/etc/ssl/dhparam.pem",
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def start_options
|
40
|
+
{
|
41
|
+
:linked_containers => @database.container_link,
|
42
|
+
:name => "passenger",
|
43
|
+
:ports => {80 => 80, 443 => 443, 2222 => 22},
|
44
|
+
:volumes => {"passenger_data" => "/home/app/application"},
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def base_docker_image
|
49
|
+
{
|
50
|
+
"2.2" => "phusion/passenger-ruby22:0.9.18",
|
51
|
+
"2.1" => "phusion/passenger-ruby21:0.9.18",
|
52
|
+
"2.0" => "phusion/passenger-ruby20:0.9.18",
|
53
|
+
"1.9" => "phusion/passenger-ruby19:0.9.18",
|
54
|
+
}[@ruby_version] || raise("Unsupported ruby version #{@ruby_version.inspect}")
|
55
|
+
end
|
56
|
+
|
57
|
+
def server_template
|
58
|
+
public_key = File.expand_path("~/.ssh/id_rsa.pub")
|
59
|
+
raise "Error: ~/.ssh/id_rsa.pub must exist." unless File.exist?(public_key)
|
60
|
+
file = Docker::Template.new(base_docker_image)
|
61
|
+
file.environment HOME: "/root"
|
62
|
+
file.run "rm -f /etc/service/nginx/down /etc/nginx/sites-enabled/default"
|
63
|
+
file.run "mkdir -p /home/app/application/shared/bundle/ruby/1.9.0/bin"
|
64
|
+
file.run "chown -R app /home/app/application && chmod -R 755 /home/app/application"
|
65
|
+
file.run "ln -s /usr/bin/node /home/app/application/shared/bundle/ruby/1.9.0/bin/node"
|
66
|
+
file.run apt_command if apt_command
|
67
|
+
file.run rubygems_command if rubygems_command
|
68
|
+
file.run "passwd -u app"
|
69
|
+
file.run "rm -f /etc/service/sshd/down"
|
70
|
+
file.add_file public_key, "/root/.ssh/authorized_keys"
|
71
|
+
file.add_file public_key, "/home/app/.ssh/authorized_keys"
|
72
|
+
file.run "chown app.app /home/app/.ssh/authorized_keys"
|
73
|
+
file.run "chown root.root /root/.ssh/authorized_keys"
|
74
|
+
file.add_file_data nginx_conf, "/etc/nginx/sites-available/application-no-ssl.conf"
|
75
|
+
file.add_file_data nginx_ssl_conf, "/etc/nginx/sites-available/application-ssl.conf"
|
76
|
+
which_config = @use_ssl ? "application-ssl" : "application-no-ssl"
|
77
|
+
file.run "ln -s /etc/nginx/sites-available/#{which_config}.conf /etc/nginx/sites-enabled/application.conf"
|
78
|
+
file.add_file_data database_yml, "/home/app/application/shared/config/database.yml"
|
79
|
+
file.add_file_data secrets_yml, "/home/app/application/shared/config/secrets.yml"
|
80
|
+
@services.each { |service| service.apply(file) }
|
81
|
+
file
|
82
|
+
end
|
83
|
+
|
84
|
+
def apt_command
|
85
|
+
if @system_packages.any?
|
86
|
+
"apt-get update && apt-get install -y #{@system_packages.join ' '}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def rubygems_command
|
91
|
+
if @rubygems_version
|
92
|
+
"gem update --system #{@rubygems_version}"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def database_yml
|
97
|
+
{@rails_env.to_s => @database.rails_config}.to_yaml
|
98
|
+
end
|
99
|
+
|
100
|
+
def secrets_yml
|
101
|
+
{@rails_env.to_s => {"secret_key_base" => SecureRandom.hex(64)}}.to_yaml
|
102
|
+
end
|
103
|
+
|
104
|
+
def nginx_conf
|
105
|
+
render_template "application-no-ssl.conf"
|
106
|
+
end
|
107
|
+
|
108
|
+
def nginx_ssl_conf
|
109
|
+
render_template "application-ssl.conf"
|
110
|
+
end
|
111
|
+
|
112
|
+
def render_template(name)
|
113
|
+
template_path = File.join File.dirname(__FILE__), "templates", "#{name}.erb"
|
114
|
+
template_data = File.read template_path
|
115
|
+
Erubis::Eruby.new(template_data).result(
|
116
|
+
:rails_env => @rails_env,
|
117
|
+
:ruby_version => @ruby_version,
|
118
|
+
:ssl_hostname => @ssl_hostname,
|
119
|
+
:max_upload_mb => @max_upload_mb,
|
120
|
+
)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "conjure/docker/template"
|
2
|
+
require "securerandom"
|
3
|
+
|
4
|
+
module Conjure
|
5
|
+
class Postgres
|
6
|
+
def initialize(container_host)
|
7
|
+
@container_host = container_host
|
8
|
+
@name = "conjure_db_#{SecureRandom.hex 8}"
|
9
|
+
@password = new_password
|
10
|
+
end
|
11
|
+
|
12
|
+
def install
|
13
|
+
server_template.start(@container_host, "/sbin/my_init", start_options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def rails_config
|
17
|
+
{
|
18
|
+
"adapter" => "postgresql",
|
19
|
+
"database" => @name,
|
20
|
+
"host" => container_name,
|
21
|
+
"username" => "db",
|
22
|
+
"password" => @password,
|
23
|
+
"template" => "template0",
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def container_link
|
28
|
+
{container_name => container_name}
|
29
|
+
end
|
30
|
+
|
31
|
+
def pending_files
|
32
|
+
[]
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def start_options
|
38
|
+
{
|
39
|
+
:name => container_name,
|
40
|
+
:volumes => {"postgres_data" => "/var/lib/postgresql/9.3/main"}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def container_name
|
45
|
+
"postgres"
|
46
|
+
end
|
47
|
+
|
48
|
+
def server_template
|
49
|
+
file = Docker::Template.new("atbaker/sd-postgres")
|
50
|
+
file.run "useradd db"
|
51
|
+
file.run "/sbin/my_init -- /sbin/setuser postgres sh -c \"sleep 1; psql -h localhost -c 'CREATE USER db CREATEDB'\""
|
52
|
+
file.run "/sbin/my_init -- /sbin/setuser db sh -c \"sleep 1; createdb db\""
|
53
|
+
file.run "echo 'local all all ident' >/usr/local/pgsql/data/pg_hba.conf"
|
54
|
+
file.run "echo 'host all all 0.0.0.0/0 md5' >>/usr/local/pgsql/data/pg_hba.conf"
|
55
|
+
file.run "echo 'host all all ::1/128 md5' >>/usr/local/pgsql/data/pg_hba.conf"
|
56
|
+
file.run "echo \"ALTER USER db PASSWORD '#{@password}'\" >/tmp/setpass"
|
57
|
+
file.run "/sbin/my_init -- /sbin/setuser postgres sh -c \"sleep 1; psql -f /tmp/setpass\""
|
58
|
+
file.run "rm /tmp/setpass"
|
59
|
+
file.run "/sbin/my_init -- /sbin/setuser db sh -c \"sleep 1; /usr/bin/createdb #{@name}\""
|
60
|
+
file
|
61
|
+
end
|
62
|
+
|
63
|
+
def new_password
|
64
|
+
SecureRandom.urlsafe_base64 20
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "conjure/delayed_job"
|
2
|
+
require "conjure/postgres"
|
3
|
+
require "conjure/passenger"
|
4
|
+
|
5
|
+
module Conjure
|
6
|
+
class RailsApplication
|
7
|
+
def initialize(container_host, options)
|
8
|
+
@container_host = container_host
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def install
|
13
|
+
components.each(&:install)
|
14
|
+
end
|
15
|
+
|
16
|
+
def pending_files
|
17
|
+
components.flat_map(&:pending_files)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def components
|
23
|
+
[
|
24
|
+
database = Postgres.new(@container_host),
|
25
|
+
Passenger.new(@container_host, @options.merge(
|
26
|
+
database: database,
|
27
|
+
services: [DelayedJob.new(@options)],
|
28
|
+
)),
|
29
|
+
]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "conjure/digital_ocean/droplet"
|
2
|
+
|
3
|
+
module Conjure
|
4
|
+
class Server < Struct.new(:ip_address)
|
5
|
+
def run(command)
|
6
|
+
`ssh #{self.class.ssh_options} root@#{ip_address} #{quote_command command}`
|
7
|
+
end
|
8
|
+
|
9
|
+
def send_file(local_name, remote_name)
|
10
|
+
`scp #{self.class.ssh_options} #{local_name} root@#{ip_address}:#{remote_name}`
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.ssh_options
|
14
|
+
"-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR"
|
15
|
+
end
|
16
|
+
|
17
|
+
def quote_command(command)
|
18
|
+
"'" + command.gsub("'", "'\"'\"'") + "'"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.create(name_prefix, options = {})
|
22
|
+
new DigitalOcean::Droplet.new(droplet_options(name_prefix, options)).ip_address
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.droplet_options(name_prefix, options = {})
|
26
|
+
{
|
27
|
+
image: "docker",
|
28
|
+
key_data: key_data,
|
29
|
+
name_prefix: name_prefix,
|
30
|
+
region: "nyc3",
|
31
|
+
size: (options[:instance_size] || "512mb"),
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.key_data
|
36
|
+
ssh_dir = File.expand_path "~/.ssh"
|
37
|
+
raise "Error: ~/.ssh/id_rsa.pub must exist." unless File.exist?(ssh_dir) && File.exist?("#{ssh_dir}/id_rsa.pub")
|
38
|
+
File.read "#{ssh_dir}/id_rsa.pub"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/conjure/swap.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Conjure
|
2
|
+
class Swap
|
3
|
+
def initialize(server)
|
4
|
+
@server = server
|
5
|
+
end
|
6
|
+
|
7
|
+
def install
|
8
|
+
if exists?
|
9
|
+
puts "Swap space detected."
|
10
|
+
else
|
11
|
+
puts "Swap space not detected, installing..."
|
12
|
+
@server.run "dd if=/dev/zero of=/root/swapfile bs=4096 count=524288"
|
13
|
+
@server.run "mkswap /root/swapfile; swapon /root/swapfile"
|
14
|
+
puts "Swap space installed."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def pending_files
|
19
|
+
[]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def exists?
|
25
|
+
@server.run("swapon -s | wc -l").to_i > 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -3,6 +3,7 @@ server {
|
|
3
3
|
root /home/app/application/current/public;
|
4
4
|
passenger_enabled on;
|
5
5
|
passenger_user app;
|
6
|
-
passenger_ruby /usr/bin/
|
6
|
+
passenger_ruby /usr/bin/ruby<%= ruby_version %>;
|
7
7
|
passenger_app_env <%= rails_env %>;
|
8
|
+
client_max_body_size <%= max_upload_mb %>M;
|
8
9
|
}
|
@@ -9,8 +9,9 @@ server {
|
|
9
9
|
root /home/app/application/current/public;
|
10
10
|
passenger_enabled on;
|
11
11
|
passenger_user app;
|
12
|
-
passenger_ruby /usr/bin/
|
12
|
+
passenger_ruby /usr/bin/ruby<%= ruby_version %>;
|
13
13
|
passenger_app_env <%= rails_env %>;
|
14
|
+
client_max_body_size <%= max_upload_mb %>M;
|
14
15
|
|
15
16
|
ssl_certificate /etc/ssl/certs/application.crt;
|
16
17
|
ssl_certificate_key /etc/ssl/private/application.key;
|
data/lib/conjure/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conjure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-scp
|
@@ -163,52 +163,23 @@ executables:
|
|
163
163
|
extensions: []
|
164
164
|
extra_rdoc_files: []
|
165
165
|
files:
|
166
|
-
- lib/conjure/
|
167
|
-
- lib/conjure/command.rb
|
168
|
-
- lib/conjure/command_target.rb
|
169
|
-
- lib/conjure/config.rb
|
170
|
-
- lib/conjure/data_set.rb
|
166
|
+
- lib/conjure/delayed_job.rb
|
171
167
|
- lib/conjure/digital_ocean/account.rb
|
172
168
|
- lib/conjure/digital_ocean/droplet.rb
|
173
169
|
- lib/conjure/digital_ocean/key.rb
|
174
170
|
- lib/conjure/digital_ocean/key_set.rb
|
171
|
+
- lib/conjure/docker/host.rb
|
172
|
+
- lib/conjure/docker/template.rb
|
175
173
|
- lib/conjure/http_request.rb
|
176
|
-
- lib/conjure/identity.rb
|
177
174
|
- lib/conjure/instance.rb
|
178
|
-
- lib/conjure/
|
179
|
-
- lib/conjure/
|
180
|
-
- lib/conjure/
|
181
|
-
- lib/conjure/
|
182
|
-
- lib/conjure/
|
183
|
-
- lib/conjure/
|
184
|
-
- lib/conjure/
|
185
|
-
- lib/conjure/provision/passenger.rb
|
186
|
-
- lib/conjure/provision/postgres.rb
|
187
|
-
- lib/conjure/provision/server.rb
|
188
|
-
- lib/conjure/provision/templates/application-no-ssl.conf.erb
|
189
|
-
- lib/conjure/provision/templates/application-ssl.conf.erb
|
190
|
-
- lib/conjure/provision.rb
|
191
|
-
- lib/conjure/service/cloud_server.rb
|
192
|
-
- lib/conjure/service/database/mysql.rb
|
193
|
-
- lib/conjure/service/database/postgres.rb
|
194
|
-
- lib/conjure/service/database.rb
|
195
|
-
- lib/conjure/service/digital_ocean_account.rb
|
196
|
-
- lib/conjure/service/docker_host.rb
|
197
|
-
- lib/conjure/service/docker_shell.rb
|
198
|
-
- lib/conjure/service/forwarded_shell.rb
|
199
|
-
- lib/conjure/service/rails_codebase.rb
|
200
|
-
- lib/conjure/service/rails_console.rb
|
201
|
-
- lib/conjure/service/rails_log_view.rb
|
202
|
-
- lib/conjure/service/rails_server.rb
|
203
|
-
- lib/conjure/service/rake_task.rb
|
204
|
-
- lib/conjure/service/remote_file_set.rb
|
205
|
-
- lib/conjure/service/remote_shell.rb
|
206
|
-
- lib/conjure/service/repository_link.rb
|
207
|
-
- lib/conjure/service/volume.rb
|
208
|
-
- lib/conjure/target.rb
|
175
|
+
- lib/conjure/passenger.rb
|
176
|
+
- lib/conjure/postgres.rb
|
177
|
+
- lib/conjure/rails_application.rb
|
178
|
+
- lib/conjure/server.rb
|
179
|
+
- lib/conjure/swap.rb
|
180
|
+
- lib/conjure/templates/application-no-ssl.conf.erb
|
181
|
+
- lib/conjure/templates/application-ssl.conf.erb
|
209
182
|
- lib/conjure/version.rb
|
210
|
-
- lib/conjure/view/application_view.rb
|
211
|
-
- lib/conjure/view/table_view.rb
|
212
183
|
- lib/conjure.rb
|
213
184
|
- README.md
|
214
185
|
- History.md
|
data/lib/conjure/application.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Conjure
|
2
|
-
class Application
|
3
|
-
attr_reader :origin
|
4
|
-
|
5
|
-
def self.find(options = {})
|
6
|
-
new(options)
|
7
|
-
end
|
8
|
-
|
9
|
-
def instances
|
10
|
-
Instance.where(:origin => @origin)
|
11
|
-
end
|
12
|
-
|
13
|
-
def data_sets
|
14
|
-
DataSet.find(:origin => @origin)
|
15
|
-
end
|
16
|
-
|
17
|
-
def name
|
18
|
-
match = @origin.match(/\/([^.]+)\.git$/) if @origin
|
19
|
-
match[1] if match
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def initialize(options = {})
|
25
|
-
@origin = options[:origin] || origin_from_path(options[:path])
|
26
|
-
end
|
27
|
-
|
28
|
-
def origin_from_path(path)
|
29
|
-
return unless path
|
30
|
-
remote_info = `cd #{path}; git remote -v |grep origin`
|
31
|
-
match = remote_info.match(/(git@github.com[^ ]+)/)
|
32
|
-
match[1] if match
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/conjure/command.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require "thor"
|
2
|
-
|
3
|
-
module Conjure
|
4
|
-
class Command < Thor
|
5
|
-
class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "Show details of low-level operations for debugging"
|
6
|
-
def initialize(*args)
|
7
|
-
super
|
8
|
-
Log.level = :debug if options[:verbose]
|
9
|
-
end
|
10
|
-
|
11
|
-
desc "create", "Create and deploy a new instance of the application"
|
12
|
-
method_option :branch, :aliases => "-b", :type => :string, :desc => "Specify branch to deploy, default 'master'"
|
13
|
-
method_option :origin, :type => :string, :desc => "Specify git URL to deploy from"
|
14
|
-
method_option :rails_env, :type => :string, :desc => "Specify the Rails environment, default 'production'"
|
15
|
-
def create
|
16
|
-
target.new_instance.create
|
17
|
-
end
|
18
|
-
|
19
|
-
desc "deploy", "Deploy the app"
|
20
|
-
method_option :branch, :aliases => "-b", :type => :string, :desc => "Specify branch to deploy, default 'master'"
|
21
|
-
method_option :origin, :type => :string, :desc => "Specify git URL to deploy from"
|
22
|
-
method_option :rails_env, :type => :string, :desc => "Specify the Rails environment, default 'production'"
|
23
|
-
def deploy
|
24
|
-
(target.existing_instance || target.new_instance).deploy
|
25
|
-
end
|
26
|
-
|
27
|
-
desc "import FILE", "Import the production database from a postgres SQL dump"
|
28
|
-
def import(file)
|
29
|
-
target.existing_instance.database.import file
|
30
|
-
end
|
31
|
-
|
32
|
-
desc "export FILE", "Export the production database to a postgres SQL dump"
|
33
|
-
def export(file)
|
34
|
-
target.existing_instance.database.export file
|
35
|
-
end
|
36
|
-
|
37
|
-
desc "log", "Display the Rails log from the deployed application"
|
38
|
-
method_option :num, :aliases => "-n", :type => :numeric, :default => 10, :desc => "Show N lines of output"
|
39
|
-
method_option :tail, :aliases => "-t", :type => :boolean, :desc => "Continue streaming new log entries"
|
40
|
-
def log
|
41
|
-
Service::RailsLogView.new(:shell => target.existing_instance.shell, :rails_env => target.existing_instance.rails_env, :lines => options[:num], :tail => options[:tail]) do |stdout|
|
42
|
-
print stdout
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
desc "rake [ARGUMENTS...]", "Run the specified rake task on the deployed application"
|
47
|
-
def rake(*arguments)
|
48
|
-
task = arguments.join(" ")
|
49
|
-
Service::RakeTask.new(:task => task, :shell => target.existing_instance.shell) do |stdout|
|
50
|
-
print stdout
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "console", "Start a console on the deployed application"
|
55
|
-
def console
|
56
|
-
Service::RailsConsole.new(:shell => target.existing_instance.shell) do |stdout|
|
57
|
-
print stdout
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
desc "show", "Show info on deployed instances"
|
62
|
-
def show
|
63
|
-
puts View::ApplicationView.new(target.application).render
|
64
|
-
end
|
65
|
-
|
66
|
-
default_task :help
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
def target
|
71
|
-
CommandTarget.new(options)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|