This repository has been archived by the owner on Sep 12, 2023. It is now read-only.
forked from seattlerb/vlad
-
Notifications
You must be signed in to change notification settings - Fork 0
/
considerations.txt
91 lines (60 loc) · 2.89 KB
/
considerations.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
* might we want per connection values?
* :except => {:no_release => true}
It is common to configure tasks to 'announce' deployments in IRC, Campfire,
etc. If you have 6 app servers, you don't want to see 6 announcements. In
Capistrano, this is handled via the :no_release => true flag. Various tasks
only execute on the 'release' servers.
An easier way to meet this would be to introduce a :release role in the
default setup
role :release, "app1.example.com"
remote_task :announce_in_irc, :roles => :release ...
Drawback: Yet another thing to change when you migrate a project from cap to
vlad
* 'dynamic deployments'
role :app, "app1.example.com"
role :app, "app2.example.com"
Let's say that app1 and app2 need slightly different monit configurations.
In Capistrano, you might approach this by making two additional roles, and
splitting your 'push a monit config' task into two. This sucks.
Vlad makes the 'execution context' of a task available. In Vlad, you would:
remote_task :update_monit, :roles => :app
rsync "templates/#{target_host}.monitrc", "/etc/monitrc"
end
* fine-grained tasks
remote_task :update
remote_task :symlink
remote_task :migrate
remote_task :deploy => [:update, :symlink, :migrate, :restart]
Let's assume that this is a multi-server config with shared deploy path.
The user wants to do only a single checkout. If we make "update" be one big
task body that includes the update, symlink, and migrate steps,
it is difficult for the user to override the roles for the particular steps
they need to change.
If we break these into separate tasks, they can say:
Rake::Task["migrate"].options[:roles] = :master_db
and the migrations will only run on the master db
* sudo / via how? and if we call it via I will stab ppl. "user" is sufficient.
* handling 'use_sudo'
1. Check for this inside the 'run' command, and preface the command
with 'sudo' if necessary
2. Default this to 'false' in the reset method, and check for it
in the default tasks that we provide:
if use_sudo then
sudo "blah"
else
run "blah"
end
Option 2 has fewer moving parts, but clutters up the tasks that care about
this.
* Dependencies
Task dependencies aren't settable when creating a Rake::RemoteTask.
* Apache configuration
Pull in railsmachine/rails/recipes/apache.rb's apache configuration. Needs
erb to work.
* I really like tasks with naming <cmd>_<role> (eg setup_app,
start_web). We could easily make the front end remote_task command
look for such a convention and apply the :role => x automatically.
* from bousquet: get a couple of server environment recipes that prepare your
machine that would be the golden ticket:
rake vlad:prepare TYPE=accelerator | ubuntu | osx | osxserver | site5 | ...
and have people maintaining those setups who depend on them