sunshine 1.0.3 → 1.1.0
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/History.txt +22 -2
- data/Manifest.txt +7 -0
- data/README.txt +333 -57
- data/Rakefile +1 -1
- data/lib/commands/add.rb +2 -2
- data/lib/commands/default.rb +15 -8
- data/lib/commands/list.rb +5 -3
- data/lib/commands/restart.rb +2 -2
- data/lib/commands/rm.rb +2 -2
- data/lib/commands/run.rb +2 -2
- data/lib/commands/start.rb +2 -2
- data/lib/commands/stop.rb +2 -2
- data/lib/sunshine.rb +117 -132
- data/lib/sunshine/app.rb +116 -10
- data/lib/sunshine/crontab.rb +11 -2
- data/lib/sunshine/daemon.rb +60 -46
- data/lib/sunshine/daemons/apache.rb +10 -2
- data/lib/sunshine/daemons/ar_sendmail.rb +0 -6
- data/lib/sunshine/daemons/delayed_job.rb +2 -0
- data/lib/sunshine/daemons/mongrel_rails.rb +32 -0
- data/lib/sunshine/daemons/nginx.rb +3 -0
- data/lib/sunshine/daemons/rainbows.rb +2 -0
- data/lib/sunshine/daemons/server.rb +51 -24
- data/lib/sunshine/daemons/server_cluster.rb +47 -0
- data/lib/sunshine/daemons/thin.rb +36 -0
- data/lib/sunshine/daemons/unicorn.rb +4 -1
- data/lib/sunshine/dependencies.rb +10 -3
- data/lib/sunshine/healthcheck.rb +2 -2
- data/lib/sunshine/remote_shell.rb +11 -2
- data/lib/sunshine/repo.rb +1 -1
- data/lib/sunshine/repos/rsync_repo.rb +1 -0
- data/templates/apache/apache.conf.erb +25 -18
- data/templates/mongrel_rails/mongrel_rails.conf.erb +9 -0
- data/templates/nginx/nginx.conf.erb +12 -9
- data/templates/thin/thin.conf.erb +12 -0
- data/test/helper_methods.rb +161 -0
- data/test/unit/test_daemon.rb +1 -8
- data/test/unit/test_nginx.rb +1 -1
- data/test/unit/test_server.rb +16 -0
- data/test/unit/test_server_cluster.rb +46 -0
- data/test/unit/test_sunshine.rb +18 -12
- metadata +14 -11
data/History.txt
CHANGED
@@ -1,6 +1,26 @@
|
|
1
|
-
=== 1.0
|
1
|
+
=== 1.1.0 / 2010-04-02
|
2
2
|
|
3
|
-
|
3
|
+
* Improvements:
|
4
|
+
|
5
|
+
* Support for server clustering with the ServerCluster class.
|
6
|
+
|
7
|
+
* Added Daemon#status method.
|
8
|
+
|
9
|
+
* Added the -R option for loading external libraries and gems.
|
10
|
+
|
11
|
+
* Added support for Thin and MongrelRails.
|
12
|
+
|
13
|
+
* Added Server support for max connections configuration.
|
14
|
+
|
15
|
+
* Bugfixes:
|
16
|
+
|
17
|
+
* Daemons no longer create control scripts if they aren't used.
|
18
|
+
|
19
|
+
* Fixed Rsync repo to auto append "/" to urls for correct rsyncing.
|
20
|
+
|
21
|
+
=== 1.0.3 / 2010-03-26
|
22
|
+
|
23
|
+
* Improvements:
|
4
24
|
|
5
25
|
* Added App#call method.
|
6
26
|
|
data/Manifest.txt
CHANGED
@@ -22,9 +22,12 @@ lib/sunshine/daemon.rb
|
|
22
22
|
lib/sunshine/daemons/apache.rb
|
23
23
|
lib/sunshine/daemons/ar_sendmail.rb
|
24
24
|
lib/sunshine/daemons/delayed_job.rb
|
25
|
+
lib/sunshine/daemons/mongrel_rails.rb
|
25
26
|
lib/sunshine/daemons/nginx.rb
|
26
27
|
lib/sunshine/daemons/rainbows.rb
|
27
28
|
lib/sunshine/daemons/server.rb
|
29
|
+
lib/sunshine/daemons/server_cluster.rb
|
30
|
+
lib/sunshine/daemons/thin.rb
|
28
31
|
lib/sunshine/daemons/unicorn.rb
|
29
32
|
lib/sunshine/dependencies.rb
|
30
33
|
lib/sunshine/dependency_lib.rb
|
@@ -44,15 +47,18 @@ lib/sunshine/server_app.rb
|
|
44
47
|
lib/sunshine/shell.rb
|
45
48
|
templates/apache/apache.conf.erb
|
46
49
|
templates/logrotate/logrotate.conf.erb
|
50
|
+
templates/mongrel_rails/mongrel_rails.conf.erb
|
47
51
|
templates/nginx/nginx.conf.erb
|
48
52
|
templates/nginx/nginx_optimize.conf
|
49
53
|
templates/nginx/nginx_proxy.conf
|
50
54
|
templates/rainbows/rainbows.conf.erb
|
51
55
|
templates/sunshine/middleware/health.rb
|
52
56
|
templates/sunshine/sunshine.rake
|
57
|
+
templates/thin/thin.conf.erb
|
53
58
|
templates/unicorn/unicorn.conf.erb
|
54
59
|
test/fixtures/app_configs/test_app.yml
|
55
60
|
test/fixtures/sunshine_test/test_upload
|
61
|
+
test/helper_methods.rb
|
56
62
|
test/mocks/mock_object.rb
|
57
63
|
test/mocks/mock_open4.rb
|
58
64
|
test/test_helper.rb
|
@@ -68,6 +74,7 @@ test/unit/test_remote_shell.rb
|
|
68
74
|
test/unit/test_repo.rb
|
69
75
|
test/unit/test_server.rb
|
70
76
|
test/unit/test_server_app.rb
|
77
|
+
test/unit/test_server_cluster.rb
|
71
78
|
test/unit/test_shell.rb
|
72
79
|
test/unit/test_sunshine.rb
|
73
80
|
test/unit/test_svn_repo.rb
|
data/README.txt
CHANGED
@@ -1,34 +1,122 @@
|
|
1
1
|
= Sunshine
|
2
2
|
|
3
|
+
http://github.com/yaksnrainbows/sunshine
|
4
|
+
|
3
5
|
http://betalabs.yellowpages.com/
|
4
6
|
|
5
|
-
== Description
|
6
7
|
|
7
|
-
|
8
|
+
== Description
|
8
9
|
|
9
|
-
Sunshine is
|
10
|
-
Knowing how it works will let you do really neat things: classes are
|
11
|
-
decoupled as much as possible to allow for optimal flexibility,
|
12
|
-
and most can be used independently.
|
10
|
+
Sunshine is a framework for rack and rails application deployment.
|
13
11
|
|
14
12
|
This gem was made possible by the sponsoring of AT&T Interactive
|
15
13
|
(http://attinteractive.com).
|
16
14
|
|
17
|
-
|
15
|
+
|
16
|
+
== Setup and Usage
|
18
17
|
|
19
18
|
Installing sunshine:
|
20
19
|
|
21
20
|
gem install sunshine
|
22
21
|
|
23
|
-
You can either use sunshine by requiring the gem in your script
|
24
|
-
|
22
|
+
You can either use sunshine by requiring the gem in your script, such as
|
23
|
+
in a rakefile (which is more common):
|
24
|
+
|
25
|
+
rake sunshine:deploy
|
26
|
+
|
27
|
+
Or you can also call built-in sunshine commands:
|
25
28
|
|
26
29
|
sunshine run my_deploy.rb -e qa
|
27
30
|
|
28
31
|
|
29
|
-
== Deploy
|
32
|
+
== Rake Deploy Tasks in 5 Minutes
|
33
|
+
|
34
|
+
Although Sunshine comes with it's own bundle of commands, they should be used
|
35
|
+
to control deployed apps on remote servers in instances where deploy information
|
36
|
+
(e.g. your deploy yaml file) is unavailable. Their purpose is to query a server
|
37
|
+
where Sunshine apps have been deployed and have a nominal amount of information
|
38
|
+
and control over them. Sunshine control commands are run on a per-server basis.
|
39
|
+
|
40
|
+
Most of the time, you'll want to control the deploy on a per-app basis.
|
41
|
+
You have the deploy information and you need to do things involving that
|
42
|
+
specific deploy. Rake tasks are great for that, and Sunshine comes with a
|
43
|
+
template rake file that you can modify to fit your needs.
|
44
|
+
|
45
|
+
You can copy the template rake file to lib/tasks/ by running:
|
46
|
+
sunshine --rakefile lib/tasks/.
|
30
47
|
|
31
|
-
|
48
|
+
If you open the file, you'll see a variety of tasks that handle deployment, to
|
49
|
+
application start/stop/restart-ing, to health checks. Most likely, the two tasks
|
50
|
+
you'll need to update are the :app (for instantiation) and the :deploy tasks.
|
51
|
+
|
52
|
+
First off, if you're using rails, you'll probably want to update "task :app" to
|
53
|
+
"task :app => :environment" in order to get all the rails environment goodness.
|
54
|
+
You'll also want to make sure that the @app object gets instantiated with the
|
55
|
+
proper hash value or yaml file.
|
56
|
+
|
57
|
+
Second, you need to update your :deploy task. Add whatever instructions you need
|
58
|
+
to the @app.deploy block. Here's a sample of completed :app and :deploy tasks:
|
59
|
+
|
60
|
+
namespace :sunshine do
|
61
|
+
|
62
|
+
desc "Instantiate Sunshine"
|
63
|
+
task :app => :environment do
|
64
|
+
Sunshine.setup 'sudo' => 'app_user',
|
65
|
+
'web_directory' => '/var/www',
|
66
|
+
'deploy_env' => Rails.environment
|
67
|
+
|
68
|
+
@app = Sunshine::App.new \
|
69
|
+
:repo => Sunshine::SvnRepo.new("svn://subversion/repo/tags/release001"),
|
70
|
+
:remote_shells => 'user@my_server.com'
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
desc "Deploy the app"
|
75
|
+
task :deploy => :app do
|
76
|
+
Sunshine.setup 'trace' => true
|
77
|
+
|
78
|
+
@app.deploy do |app|
|
79
|
+
|
80
|
+
rainbows = Sunshine::Rainbows.new app, :port => 5001
|
81
|
+
|
82
|
+
nginx = Sunshine::Nginx.new app, :point_to => rainbows
|
83
|
+
|
84
|
+
app.run_geminstaller
|
85
|
+
|
86
|
+
rainbows.setup
|
87
|
+
nginx.setup
|
88
|
+
end
|
89
|
+
|
90
|
+
@app.start :force => true
|
91
|
+
end
|
92
|
+
|
93
|
+
...
|
94
|
+
end
|
95
|
+
|
96
|
+
And that's it! Try running your Sunshine rake tasks!
|
97
|
+
|
98
|
+
rake sunshine:app # Instantiate Sunshine
|
99
|
+
rake sunshine:db_migrate # Run db:migrate on remote :db servers
|
100
|
+
rake sunshine:deploy # Deploy the app
|
101
|
+
rake sunshine:health # Get the health state
|
102
|
+
rake sunshine:health:disable # Turn off health check
|
103
|
+
rake sunshine:health:enable # Turn on health check
|
104
|
+
rake sunshine:health:remove # Remove health check
|
105
|
+
rake sunshine:info # Get deployed app info
|
106
|
+
rake sunshine:restart # Run the remote restart script
|
107
|
+
rake sunshine:start # Run the remote start script
|
108
|
+
rake sunshine:status # Check if the deployed app is running
|
109
|
+
rake sunshine:stop # Run the remote stop script
|
110
|
+
|
111
|
+
|
112
|
+
== Understanding Deployment
|
113
|
+
|
114
|
+
=== The App Class
|
115
|
+
|
116
|
+
Writing a Sunshine script is easy.
|
117
|
+
App objects are the core of Sunshine deployment. The Sunshine paradygm
|
118
|
+
is to construct an app object, and run custom deploy code by passing
|
119
|
+
a block to its deploy method:
|
32
120
|
|
33
121
|
options = {
|
34
122
|
:name => 'myapp',
|
@@ -36,12 +124,13 @@ Writing a Sunshine script is easy:
|
|
36
124
|
:root_path => '/usr/local/myapp'
|
37
125
|
}
|
38
126
|
|
39
|
-
options[:remote_shells] =
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
127
|
+
options[:remote_shells] =
|
128
|
+
case Sunshine.deploy_env
|
129
|
+
when 'qa'
|
130
|
+
['qa1.svr.com', 'qa2.svr.com']
|
131
|
+
else
|
132
|
+
'localhost'
|
133
|
+
end
|
45
134
|
|
46
135
|
Sunshine::App.deploy(options) do |app|
|
47
136
|
|
@@ -52,15 +141,32 @@ Writing a Sunshine script is easy:
|
|
52
141
|
|
53
142
|
end
|
54
143
|
|
144
|
+
An App holds information about where to deploy an application to and
|
145
|
+
how to deploy it, as well as many convenience methods to setup and
|
146
|
+
manipulate the deployment process. Most of these methods support passing
|
147
|
+
remote shell find options:
|
148
|
+
|
149
|
+
app.rake 'db:migrate', :role => :db
|
150
|
+
app.deploy :host => 'server1.com'
|
151
|
+
|
152
|
+
See Sunshine::App#find for more information.
|
55
153
|
|
56
|
-
|
57
|
-
|
154
|
+
|
155
|
+
=== Working With Environments
|
156
|
+
|
157
|
+
Environment specific setups can be accomplished in a few ways. The most
|
158
|
+
obvious way is to create a different script for each environment. You can
|
159
|
+
also define the App's constructor hash on a per-environment basis
|
160
|
+
(as seen above), which gives you lots of control.
|
161
|
+
That said, the App class also provides a mechanism for environment handling
|
162
|
+
using configuration files.
|
163
|
+
The App::new methods support passing a path to a yaml config file:
|
58
164
|
|
59
165
|
app = Sunshine::App.new("path/to/config.yml")
|
60
166
|
app.deploy{|app| Sunshine::Rainbows.new(app).restart }
|
61
167
|
|
62
168
|
|
63
|
-
The yaml file can also be any IO stream
|
169
|
+
The yaml file can also be any IO stream who's output will parse to yaml.
|
64
170
|
This can be ueful for passing the file's DATA and keep all the deploy
|
65
171
|
information in one place:
|
66
172
|
|
@@ -109,51 +215,74 @@ Yaml files are read on a deploy-environment basis so its format reflects this:
|
|
109
215
|
|
110
216
|
In this example, :prod inherits top level values from :qa (only :repo in this
|
111
217
|
instance). The :inherits key also supports an array as its value.
|
218
|
+
All environments also inherit from the :default environment. The :default is
|
219
|
+
also used if the app's deploy_env is not found in the config.
|
220
|
+
See Sunshine::App for more information.
|
112
221
|
|
113
222
|
|
114
|
-
==
|
223
|
+
== Servers
|
115
224
|
|
116
|
-
|
117
|
-
to control deployed apps on remote servers in instances where deploy information
|
118
|
-
(e.g. your deploy yaml file) is unavailable. Their purpose is to query a server
|
119
|
-
where Sunshine apps have been deployed and have a nominal amount of information
|
120
|
-
and control over them. Sunshine control commands are run on a per-server basis.
|
225
|
+
=== Basics
|
121
226
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
227
|
+
Sunshine lets you install and setup server applications to run your app on.
|
228
|
+
The typical approach to serving ruby applications is to run Nginx or Apache
|
229
|
+
as a load balancer in front of a backend such as Thin, or Mongrels.
|
230
|
+
Using Sunshine, this is most commonly defined as a part of the deploy process:
|
126
231
|
|
127
|
-
|
128
|
-
|
232
|
+
app.deploy do |app|
|
233
|
+
backend = Sunshine::Thin.new app, :port => 5000
|
234
|
+
nginx = Sunshine::Nginx.new app, :point_to => backend
|
129
235
|
|
130
|
-
|
131
|
-
|
132
|
-
|
236
|
+
backend.setup
|
237
|
+
nginx.setup
|
238
|
+
end
|
133
239
|
|
134
|
-
|
135
|
-
"task :app => :environment" in order to get all the rails environment goodness.
|
136
|
-
You'll also want to make sure that the @app object gets instantiated with the
|
137
|
-
proper hash value or yaml file.
|
240
|
+
app.start :force => true
|
138
241
|
|
139
|
-
|
140
|
-
|
242
|
+
When a new Server is instantiated and its setup method is run, it is added to
|
243
|
+
the app's control scripts. This means that when the deploy is complete, those
|
244
|
+
servers can be controlled by the app's start/stop/restart/status methods.
|
141
245
|
|
142
|
-
And that's it! Try running your Sunshine rake tasks!
|
143
246
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
247
|
+
=== Load Balancing
|
248
|
+
|
249
|
+
Since frontend servers support load balancing, you can also point them to
|
250
|
+
server clusters:
|
251
|
+
|
252
|
+
backend = Sunshine::Thin.new_cluster 10, app, :port => 5000
|
253
|
+
nginx = Sunshine::Nginx.new app, :point_to => backend
|
254
|
+
|
255
|
+
backend.setup
|
256
|
+
nginx.setup
|
257
|
+
|
258
|
+
In this instance, Nginx will know to forward requests to the cluster of Thin
|
259
|
+
servers created. You could do this more explicitely with the following:
|
260
|
+
|
261
|
+
backend = Array.new
|
262
|
+
|
263
|
+
5000.upto(5009) do |port|
|
264
|
+
thin = Sunshine::Thin.new app, :port => port, :name => "thin.#{port}"
|
265
|
+
thin.setup
|
266
|
+
|
267
|
+
backend << thin
|
268
|
+
end
|
269
|
+
|
270
|
+
Sunshine::Nginx.new app, :point_to => backend
|
271
|
+
|
272
|
+
|
273
|
+
=== Phusion Passenger
|
274
|
+
|
275
|
+
If you are running a lower traffic application, Phusion Passenger is available
|
276
|
+
for both Nginx and Apache. Passenger will be used by default if no backend
|
277
|
+
is specified. You could have an Nginx Passenger setup on port 80 with a
|
278
|
+
single line:
|
279
|
+
|
280
|
+
Sunshine::Nginx.new(app).setup
|
281
|
+
|
282
|
+
Easy!
|
283
|
+
|
284
|
+
Servers let you do much more configuration with log files, config files, etc.
|
285
|
+
For more information, see Sunshine::Server.
|
157
286
|
|
158
287
|
|
159
288
|
== Dependencies
|
@@ -191,6 +320,7 @@ with Sunshine:
|
|
191
320
|
Warning: If the :call options isn't specified, the dependency will attempt to
|
192
321
|
install on the local system.
|
193
322
|
|
323
|
+
See Sunshine::Dependency for more information.
|
194
324
|
|
195
325
|
=== Internal Sunshine Dependencies (advanced)
|
196
326
|
|
@@ -224,6 +354,151 @@ server_apps use the same dependency definition, you may consider:
|
|
224
354
|
Sunshine.dependencies.apt 'rubygems', :version => '1.3.2'
|
225
355
|
# ... and so on
|
226
356
|
|
357
|
+
Note: You can disable automatic dependency installation by setting Sunshine's
|
358
|
+
auto_dependencies config to false.
|
359
|
+
|
360
|
+
|
361
|
+
== Using Permissions
|
362
|
+
|
363
|
+
In order to deploy applications successfully, it's important to know how,
|
364
|
+
where, and when to use permissions in Sunshine deploy scripts.
|
365
|
+
|
366
|
+
=== The Shell Class
|
367
|
+
|
368
|
+
The primary handler of permissions is the Sunshine::Shell class. Since all
|
369
|
+
commands are run through a Shell object, it naturally handles permission
|
370
|
+
changes. The following will create a new remote shell which is logged into
|
371
|
+
as user "bob" but will use root to perform all calls:
|
372
|
+
|
373
|
+
# The following two lines are equivalent:
|
374
|
+
svr = Sunshine::RemoteShell.new "bob@myserver.com", :sudo => true
|
375
|
+
svr = Sunshine::RemoteShell.new "myserver.com", :user => "bob" :sudo => true
|
376
|
+
|
377
|
+
Sudo can also be set after instantiation. Let's change the permissions back to
|
378
|
+
its default:
|
379
|
+
|
380
|
+
svr.sudo = nil
|
381
|
+
|
382
|
+
You can of course also run single commands with a one-off sudo setting:
|
383
|
+
|
384
|
+
svr.call "whoami", :sudo => true
|
385
|
+
#=> "root"
|
386
|
+
|
387
|
+
Shell sudo values are important! Depending on what the value of shell.sudo is,
|
388
|
+
behavior will change dramatically:
|
389
|
+
|
390
|
+
- sudo = true -> sudo -H command
|
391
|
+
- sudo = 'root' -> sudo -H -u root command
|
392
|
+
- sudo = 'usr' -> sudo -H -u usr command
|
393
|
+
- sudo = false -> enforce never using sudo
|
394
|
+
- sudo = nil -> passthrough (don't care)
|
395
|
+
|
396
|
+
Here are a few examples of these values being used:
|
397
|
+
|
398
|
+
svr = Sunshine::RemoteShell.new "bob@myserver.com", :sudo => true
|
399
|
+
|
400
|
+
svr.call "whoami" #=> root
|
401
|
+
svr.call "whoami", :sudo => "usr" #=> usr
|
402
|
+
svr.call "whoami", :sudo => nil #=> root
|
403
|
+
svr.call "whoami", :sudo => false #=> bob
|
404
|
+
|
405
|
+
|
406
|
+
These values are crucial as other Sunshine classes have and pass around other
|
407
|
+
sudo requirements/values to shell objects.
|
408
|
+
|
409
|
+
|
410
|
+
=== Who Affects Sudo
|
411
|
+
|
412
|
+
There are 3 main places to beware of how sudo gets used.
|
413
|
+
|
414
|
+
==== Apps
|
415
|
+
|
416
|
+
The first, most obvious place is the App class:
|
417
|
+
|
418
|
+
app.sudo = "bob"
|
419
|
+
app.server_apps.first.shell.sudo #=> "bob"
|
420
|
+
|
421
|
+
app.sudo = true
|
422
|
+
app.server_apps.first.shell.sudo #=> true
|
423
|
+
|
424
|
+
Since the App class effectively owns the shells it uses, setting sudo on the
|
425
|
+
App will permanently change the sudo value of its shells.
|
426
|
+
|
427
|
+
Note: You may notice that you can set a sudo config value on the Sunshine
|
428
|
+
module. This is used for the default value of Sunshine::App#sudo and is passed
|
429
|
+
along to an app's shells on instantiation.
|
430
|
+
|
431
|
+
|
432
|
+
==== Dependencies
|
433
|
+
|
434
|
+
Since Sunshine also deals with installing dependencies, the Dependency class
|
435
|
+
and its children all have a class level sudo setting which is set to true
|
436
|
+
by default. This means that any dependency will by default run its commands
|
437
|
+
using sudo:
|
438
|
+
|
439
|
+
dep = Sunshine::Apt.new "libdvdread"
|
440
|
+
dep.install! :call => shell
|
441
|
+
|
442
|
+
#=> sudo -H apt-get install libdvdread
|
443
|
+
|
444
|
+
This can be changed on the class level:
|
445
|
+
|
446
|
+
shell.sudo = "usr"
|
447
|
+
|
448
|
+
Sunshine::Apt.sudo = nil # let the shell handle sudo
|
449
|
+
dep.install! :call => shell
|
450
|
+
|
451
|
+
#=> sudo -H -u usr apt-get install libdvdread
|
452
|
+
|
453
|
+
It can also be set on an individual basis:
|
454
|
+
|
455
|
+
dep.install! :call => shell, :sudo => nil
|
456
|
+
|
457
|
+
|
458
|
+
==== Servers
|
459
|
+
|
460
|
+
Because of how unix works with servers and ports, it's not uncommon to have to
|
461
|
+
run start/stop/restart server commands with upgraded permissions. This is true
|
462
|
+
for Apache and Nginx on ports below 1024. Due to this, servers automatically try
|
463
|
+
to adjust their permissions to run their commands correctly. Since servers
|
464
|
+
should run their commands consistantly, the only way to affect their sudo value
|
465
|
+
is on a server instance basis:
|
466
|
+
|
467
|
+
server = Nginx.new app, :sudo => nil # let the shell handle sudo
|
468
|
+
|
469
|
+
However, the above will most likely cause Nginx's start command to fail if
|
470
|
+
shell permissions don't allow running root processes.
|
471
|
+
|
472
|
+
Note: Servers will ONLY touch permissions if their port is smaller than 1024.
|
473
|
+
|
474
|
+
|
475
|
+
== Sunshine Configuration
|
476
|
+
|
477
|
+
Aside from passing the sunshine command options, Sunshine can be configured
|
478
|
+
both in the deploy script by calling Sunshine.setup and globally in the
|
479
|
+
~/.sunshine file. The following is a list of supported config keys:
|
480
|
+
|
481
|
+
'auto' -> Automate calls; fail instead of prompting the user;
|
482
|
+
defaults to false.
|
483
|
+
|
484
|
+
'auto_dependencies' -> Check and install missing deploy dependencies;
|
485
|
+
defaults to true.
|
486
|
+
|
487
|
+
'deploy_env' -> The default deploy environment to use;
|
488
|
+
defaults to :development.
|
489
|
+
|
490
|
+
'level' -> Logger's debug level; defaults to 'info'.
|
491
|
+
|
492
|
+
'max_deploy_versions' -> The maximum number of deploys to keep on a server;
|
493
|
+
defaults to 5.
|
494
|
+
|
495
|
+
'require' -> Require external ruby libs or gems; defaults to nil.
|
496
|
+
|
497
|
+
'trace' -> Show detailed output messages; defaults to false.
|
498
|
+
|
499
|
+
'web_directory' -> Path to where apps should be deployed to;
|
500
|
+
defaults to '/var/www'.
|
501
|
+
|
227
502
|
|
228
503
|
== Deployed Application Control
|
229
504
|
|
@@ -251,11 +526,12 @@ For more help on sunshine commands, use 'sunshine COMMAND --help'.
|
|
251
526
|
For more information about control scripts, see the
|
252
527
|
Sunshine::App#build_control_scripts method.
|
253
528
|
|
254
|
-
|
529
|
+
|
530
|
+
== Licence
|
255
531
|
|
256
532
|
(The MIT License)
|
257
533
|
|
258
|
-
Copyright (c) 2010
|
534
|
+
Copyright (c) 2010
|
259
535
|
|
260
536
|
Permission is hereby granted, free of charge, to any person obtaining
|
261
537
|
a copy of this software and associated documentation files (the
|