capcake 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/capcake.rb +81 -2
- data/lib/templates/create_database.rsql +6 -0
- data/lib/templates/database.rphp +14 -0
- metadata +4 -2
data/lib/capcake.rb
CHANGED
@@ -32,7 +32,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
32
32
|
set :git_enable_submodules, 1
|
33
33
|
set :revision, source.head
|
34
34
|
set :deploy_via, :checkout
|
35
|
-
set :shared_children, %w(system tmp)
|
35
|
+
set :shared_children, %w(config system tmp)
|
36
36
|
|
37
37
|
set :git_flag_quiet, ""
|
38
38
|
|
@@ -45,11 +45,24 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
45
45
|
def capcake()
|
46
46
|
set :deploy_to, "/var/www/#{application}" if (deploy_to.empty?)
|
47
47
|
set(:current_path) { File.join(deploy_to, current_dir) }
|
48
|
+
set(:database_path) { File.join(File.join(shared_path, "config"), "database.php") }
|
48
49
|
set(:shared_path) { File.join(deploy_to, shared_dir) }
|
49
50
|
_cset(:cake_path) { shared_path }
|
50
51
|
_cset(:tmp_path) { File.join(shared_path, "tmp") }
|
51
52
|
_cset(:cache_path) { File.join(tmp_path, "cache") }
|
52
53
|
_cset(:logs_path) { File.join(tmp_path, "logs") }
|
54
|
+
|
55
|
+
after("deploy:setup", "cake:database:config") if (!remote_file_exists?(database_path))
|
56
|
+
after("deploy:symlink", "cake:database:symlink") if (remote_file_exists?(database_path))
|
57
|
+
end
|
58
|
+
|
59
|
+
def defaults(val, default)
|
60
|
+
val = default if (val.empty?)
|
61
|
+
val
|
62
|
+
end
|
63
|
+
|
64
|
+
def remote_file_exists?(full_path)
|
65
|
+
'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip
|
53
66
|
end
|
54
67
|
|
55
68
|
# =========================================================================
|
@@ -147,7 +160,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
147
160
|
by putting each new release of your application in its own directory. When \
|
148
161
|
you deploy a new version, this task's job is to update the `current', \
|
149
162
|
`current/tmp', `current/webroot/system' symlinks to point at the new version. \
|
150
|
-
|
163
|
+
|
151
164
|
You will rarely need to call this task directly; instead, use the `deploy' \
|
152
165
|
task (which performs a complete deploy, including `restart') or the 'update' \
|
153
166
|
task (which does everything except `restart').
|
@@ -449,6 +462,72 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
449
462
|
end
|
450
463
|
end
|
451
464
|
|
465
|
+
namespace :database do
|
466
|
+
desc <<-DESC
|
467
|
+
Generates CakePHP database configuration file in #{shared_path}/config \
|
468
|
+
and symlinks #{current_path}/config/database.php to it
|
469
|
+
DESC
|
470
|
+
task :config, :roles => :web, :except => { :no_release => true } do
|
471
|
+
require 'erb'
|
472
|
+
on_rollback { run "rm #{database_path}" }
|
473
|
+
puts "Database configuration"
|
474
|
+
_cset :db_driver, defaults(Capistrano::CLI.ui.ask("driver [mysql]:"), 'mysql')
|
475
|
+
_cset :db_host, defaults(Capistrano::CLI.ui.ask("hostname [localhost]:"), 'localhost')
|
476
|
+
_cset :db_login, defaults(Capistrano::CLI.ui.ask("username [#{user}]:"), user)
|
477
|
+
_cset :db_password, Capistrano::CLI.password_prompt("password:")
|
478
|
+
_cset :db_name, defaults(Capistrano::CLI.ui.ask("db name [#{application}]:"), application)
|
479
|
+
_cset :db_prefix, Capistrano::CLI.ui.ask("prefix:")
|
480
|
+
_cset :db_persistent, defaults(Capistrano::CLI.ui.ask("persistent [false]:"), 'false')
|
481
|
+
_cset :db_encoding, defaults(Capistrano::CLI.ui.ask("encoding [utf8]:"), 'utf8')
|
482
|
+
|
483
|
+
template = File.read(File.join(File.dirname(__FILE__), "templates", "database.rphp"))
|
484
|
+
result = ERB.new(template).result(binding)
|
485
|
+
|
486
|
+
put(result, "#{database_path}", :mode => 0644, :via => :scp)
|
487
|
+
after("deploy:symlink", "cake:database:symlink")
|
488
|
+
end
|
489
|
+
desc <<-DESC
|
490
|
+
Creates MySQL database, database user and grants permissions on DB servers
|
491
|
+
DESC
|
492
|
+
task :create, :roles => :db, :except => { :no_releases => true } do
|
493
|
+
require 'erb'
|
494
|
+
|
495
|
+
_cset :mysql_admin_user, defaults(Capistrano::CLI.ui.ask("username [root]:"), 'root')
|
496
|
+
_cset :mysql_admin_password, Capistrano::CLI.password_prompt("password:")
|
497
|
+
|
498
|
+
_cset :mysql_grant_priv_type, defaults(Capistrano::CLI.ui.ask("Grant privilege types:"), 'ALL')
|
499
|
+
_cset :mysql_grant_locations, defaults(Capistrano::CLI.ui.ask("Grant locations:"), ["localhost"])
|
500
|
+
|
501
|
+
_cset :db_login, defaults(Capistrano::CLI.ui.ask("username [#{user}]:"), user)
|
502
|
+
_cset :db_password, Capistrano::CLI.password_prompt("password:")
|
503
|
+
_cset :db_name, defaults(Capistrano::CLI.ui.ask("db name [#{application}]:"), application)
|
504
|
+
_cset :db_encoding, defaults(Capistrano::CLI.ui.ask("encoding [utf8]:"), 'utf8')
|
505
|
+
|
506
|
+
set :tmp_filename, File.join(shared_path, "config/create_db_#{db_name}.sql")
|
507
|
+
|
508
|
+
template = File.read(File.join(File.dirname(__FILE__), "templates", "create_database.rsql"))
|
509
|
+
result = ERB.new(template).result(binding)
|
510
|
+
|
511
|
+
put(result, "#{tmp_filename}", :mode => 0644, :via => :scp)
|
512
|
+
|
513
|
+
run "mysql -u #{mysql_admin_user} -p#{mysql_admin_password} < #{tmp_filename}"
|
514
|
+
run "#{try_sudo} rm #{tmp_filename}"
|
515
|
+
end
|
516
|
+
desc <<-DESC
|
517
|
+
Creates database tables on primary DB servers
|
518
|
+
DESC
|
519
|
+
task :schema, :roles => :db, :primary => true, :except => { :no_releases => true } do
|
520
|
+
# ...
|
521
|
+
end
|
522
|
+
desc <<-DESC
|
523
|
+
Creates required CakePHP's APP/config/database.php as a symlink to \
|
524
|
+
#{deploy_to}/shared/config/database.php
|
525
|
+
DESC
|
526
|
+
task :symlink, :roles => :web, :except => { :no_release => true } do
|
527
|
+
run "#{try_sudo} ln -s #{database_path} #{current_path}/config/database.php"
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
452
531
|
namespace :logs do
|
453
532
|
desc <<-DESC
|
454
533
|
Clears CakePHP's APP/tmp/logs and its sub-directories
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<% mysql_grant_locations.each do |location| %>GRANT <%= mysql_grant_priv_type %> ON <%= db_name %>.* TO '<%= db_login %>'@'<%= location %>' IDENTIFIED BY '<%= db_password %>';
|
2
|
+
<% end %>
|
3
|
+
|
4
|
+
CREATE DATABASE IF NOT EXISTS <%= db_name %> CHARACTER SET = <%= db_encoding %>;
|
5
|
+
|
6
|
+
FLUSH PRIVILEGES;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?php
|
2
|
+
class DATABASE_CONFIG {
|
3
|
+
public $default = array(
|
4
|
+
'driver' => '<%= db_driver %>',
|
5
|
+
'persistent' => '<%= db_persistent %>',
|
6
|
+
'host' => '<%= db_host %>',
|
7
|
+
'login' => '<%= db_login %>',
|
8
|
+
'password' => '<%= db_password %>',
|
9
|
+
'database' => '<%= db_name %>',
|
10
|
+
'prefix' => '<%= db_prefix %>',
|
11
|
+
'encoding' => '<%= db_encoding %>',
|
12
|
+
);
|
13
|
+
}
|
14
|
+
?>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capcake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jad Bitar
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-17 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -34,6 +34,8 @@ extra_rdoc_files:
|
|
34
34
|
files:
|
35
35
|
- lib/TODO
|
36
36
|
- lib/capcake.rb
|
37
|
+
- lib/templates/create_database.rsql
|
38
|
+
- lib/templates/database.rphp
|
37
39
|
- lib/templates/maintenance.rhtml
|
38
40
|
- LICENSE
|
39
41
|
- README.markdown
|