capifony 2.1.7 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,118 @@
1
+ namespace :database do
2
+ namespace :dump do
3
+ desc "Dump remote database"
4
+ task :remote do
5
+ filename = "#{application}.remote_dump.#{Time.now.strftime("%Y-%m-%d_%H-%M-%S")}.sql.gz"
6
+ file = "/tmp/#{filename}"
7
+ sqlfile = "#{application}_dump.sql"
8
+ config = ""
9
+
10
+ run "cat #{shared_path}/config/databases.yml" do |ch, st, data|
11
+ config = load_database_config data, symfony_env_prod
12
+ end
13
+
14
+ sql_dump_cmd = generate_sql_command('dump', config)
15
+ run "#{sql_dump_cmd} | gzip -c > #{file}" do |ch, stream, data|
16
+ puts data
17
+ end
18
+
19
+ require "fileutils"
20
+ FileUtils.mkdir_p("backups")
21
+ get file, "backups/#{filename}"
22
+ begin
23
+ FileUtils.ln_sf(filename, "backups/#{application}.remote_dump.latest.sql.gz")
24
+ rescue NotImplementedError # hack for windows which doesnt support symlinks
25
+ FileUtils.cp_r("backups/#{filename}", "backups/#{application}.remote_dump.latest.sql.gz")
26
+ end
27
+ run "rm #{file}"
28
+ end
29
+
30
+ desc "Dump local database"
31
+ task :local do
32
+ filename = "#{application}.local_dump.#{Time.now.strftime("%Y-%m-%d_%H-%M-%S")}.sql.gz"
33
+ tmpfile = "backups/#{application}_dump_tmp.sql"
34
+ file = "backups/#{filename}"
35
+ config = load_database_config IO.read('config/databases.yml'), symfony_env_local
36
+ sqlfile = "#{application}_dump.sql"
37
+
38
+ require "fileutils"
39
+ FileUtils::mkdir_p("backups")
40
+
41
+ sql_dump_cmd = generate_sql_command('dump', config)
42
+ run_locally "#{sql_dump_cmd} > #{tmpfile}"
43
+
44
+ File.open(tmpfile, "r+") do |f|
45
+ gz = Zlib::GzipWriter.open(file)
46
+ while (line = f.gets)
47
+ gz << line
48
+ end
49
+ gz.flush
50
+ gz.close
51
+ end
52
+
53
+ begin
54
+ FileUtils.ln_sf(filename, "backups/#{application}.local_dump.latest.sql.gz")
55
+ rescue NotImplementedError # hack for windows which doesnt support symlinks
56
+ FileUtils.cp_r("backups/#{filename}", "backups/#{application}.local_dump.latest.sql.gz")
57
+ end
58
+ FileUtils.rm(tmpfile)
59
+ end
60
+ end
61
+
62
+ namespace :move do
63
+ desc "Dump remote database, download it to local & populate here"
64
+ task :to_local do
65
+
66
+ database.dump.remote
67
+
68
+ begin
69
+ zipped_file_path = `readlink -f backups/#{application}.remote_dump.latest.sql.gz`.chop # gunzip does not work with a symlink
70
+ rescue NotImplementedError # hack for windows which doesnt support symlinks
71
+ zipped_file_path = "backups/#{application}.remote_dump.latest.sql.gz"
72
+ end
73
+ unzipped_file_path = "backups/#{application}_dump.sql"
74
+
75
+ run_locally "gunzip -c #{zipped_file_path} > #{unzipped_file_path}"
76
+
77
+ config = load_database_config IO.read('config/databases.yml'), symfony_env_local
78
+
79
+ run_locally generate_sql_command('drop', config)
80
+ run_locally generate_sql_command('create', config)
81
+
82
+ sql_import_cmd = generate_sql_command('import', config)
83
+ run_locally "#{sql_import_cmd} < #{unzipped_file_path}"
84
+
85
+ FileUtils.rm("#{unzipped_file_path}")
86
+ end
87
+
88
+ desc "Dump local database, load it to remote & populate there"
89
+ task :to_remote do
90
+
91
+ filename = "#{application}.local_dump.latest.sql.gz"
92
+ file = "backups/#{filename}"
93
+ sqlfile = "#{application}_dump.sql"
94
+ config = ""
95
+
96
+ database.dump.local
97
+
98
+ upload(file, "/tmp/#{filename}", :via => :scp)
99
+ run "gunzip -c /tmp/#{filename} > /tmp/#{sqlfile}"
100
+
101
+ run "cat #{shared_path}/config/databases.yml" do |ch, st, data|
102
+ config = load_database_config data, symfony_env_prod
103
+ end
104
+
105
+ run generate_sql_command('drop', config)
106
+ run generate_sql_command('create', config)
107
+
108
+ sql_import_cmd = generate_sql_command('import', config)
109
+
110
+ run "#{sql_import_cmd} < /tmp/#{sqlfile}" do |ch, stream, data|
111
+ puts data
112
+ end
113
+
114
+ run "rm /tmp/#{filename}"
115
+ run "rm /tmp/#{sqlfile}"
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,56 @@
1
+ namespace :deploy do
2
+ desc "Runs the symfony migrations"
3
+ task :migrate do
4
+ symfony.orm.migrate
5
+ end
6
+
7
+ desc "Symlink static directories and static files that need to remain between deployments."
8
+ task :share_childs do
9
+ if shared_children
10
+ shared_children.each do |link|
11
+ run "mkdir -p #{shared_path}/#{link}"
12
+ run "if [ -d #{release_path}/#{link} ] ; then rm -rf #{release_path}/#{link}; fi"
13
+ run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
14
+ end
15
+ end
16
+ if shared_files
17
+ shared_files.each do |link|
18
+ link_dir = File.dirname("#{shared_path}/#{link}")
19
+ run "mkdir -p #{link_dir}"
20
+ run "touch #{shared_path}/#{link}"
21
+ run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
22
+ end
23
+ end
24
+ end
25
+
26
+ desc "Customize the finalize_update task to work with symfony."
27
+ task :finalize_update, :except => { :no_release => true } do
28
+ run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
29
+ run "mkdir -p #{latest_release}/cache"
30
+ run "chmod -R g+w #{latest_release}/cache"
31
+
32
+ # Share common files & folders
33
+ share_childs
34
+
35
+ if fetch(:normalize_asset_timestamps, true)
36
+ stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S")
37
+ asset_paths = asset_children.map { |p| "#{latest_release}/#{p}" }.join(" ")
38
+ run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env => { "TZ" => "UTC" }
39
+ end
40
+ end
41
+
42
+ desc "Need to overwrite the deploy:cold task so it doesn't try to run the migrations."
43
+ task :cold do
44
+ update
45
+ symfony.orm.build_db_and_load
46
+ start
47
+ end
48
+
49
+ desc "Deploy the application and run the test suite."
50
+ task :testall do
51
+ update_code
52
+ create_symlink
53
+ symfony.orm.build_db_and_load
54
+ symfony.tests.all
55
+ end
56
+ end
@@ -0,0 +1,76 @@
1
+ namespace :symfony do
2
+ namespace :doctrine do
3
+ desc "Compile doctrine"
4
+ task :compile do
5
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:compile"
6
+ end
7
+
8
+ desc "Ensure Doctrine is correctly configured"
9
+ task :setup do
10
+ conf_files_exists = capture("if test -s #{shared_path}/config/databases.yml ; then echo 'exists' ; fi").strip
11
+ if (!conf_files_exists.eql?("exists"))
12
+ symfony.configure.database
13
+ end
14
+ end
15
+
16
+ desc "Execute a DQL query and view the results"
17
+ task :dql do
18
+ prompt_with_default(:query, "")
19
+
20
+ stream "cd #{latest_release} && #{php_bin} ./symfony doctrine:dql #{query} --env=#{symfony_env_prod}"
21
+ end
22
+
23
+ desc "Dumps data to the fixtures directory"
24
+ task :data_dump do
25
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:data-dump --env=#{symfony_env_prod}"
26
+ end
27
+
28
+ desc "Loads YAML fixture data"
29
+ task :data_load do
30
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:data-load --env=#{symfony_env_prod}"
31
+ end
32
+
33
+ desc "Loads YAML fixture data without remove"
34
+ task :data_load_append do
35
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:data-load --append --env=#{symfony_env_prod}"
36
+ end
37
+
38
+ desc "Migrates database to current version"
39
+ task :migrate do
40
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:migrate --env=#{symfony_env_prod}"
41
+ end
42
+
43
+ desc "Generate model lib form and filters classes based on your schema"
44
+ task :build_classes do
45
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:build --all-classes --env=#{symfony_env_prod}"
46
+ end
47
+
48
+ desc "Generate code & database based on your schema"
49
+ task :build_all do
50
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database? (y/N)")
51
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:build --all --no-confirmation --env=#{symfony_env_prod}"
52
+ end
53
+ end
54
+
55
+ desc "Generate code & database based on your schema & load fixtures"
56
+ task :build_all_and_load do
57
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database and load #{symfony_env_prod}'s fixtures? (y/N)")
58
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:build --all --and-load --no-confirmation --env=#{symfony_env_prod}"
59
+ end
60
+ end
61
+
62
+ desc "Generate sql & database based on your schema"
63
+ task :build_db do
64
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database? (y/N)")
65
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:build --sql --db --no-confirmation --env=#{symfony_env_prod}"
66
+ end
67
+ end
68
+
69
+ desc "Generate sql & database based on your schema & load fixtures"
70
+ task :build_db_and_load do
71
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database and load #{symfony_env_prod}'s fixtures? (y/N)")
72
+ run "cd #{latest_release} && #{php_bin} ./symfony doctrine:build --sql --db --and-load --no-confirmation --env=#{symfony_env_prod}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,57 @@
1
+ namespace :symfony do
2
+ namespace :propel do
3
+ desc "Ensure Propel is correctly configured"
4
+ task :setup do
5
+ conf_files_exists = capture("if test -s #{shared_path}/config/propel.ini -a -s #{shared_path}/config/databases.yml ; then echo 'exists' ; fi").strip
6
+
7
+ # share childs again (for propel.ini file)
8
+ shared_files << "config/propel.ini"
9
+ deploy.share_childs
10
+
11
+ if (!conf_files_exists.eql?("exists"))
12
+ run "cp #{symfony_lib}/plugins/sfPropelPlugin/config/skeleton/config/propel.ini #{shared_path}/config/propel.ini"
13
+ symfony.configure.database
14
+ end
15
+ end
16
+
17
+ desc "Migrates database to current version"
18
+ task :migrate do
19
+ puts "propel doesn't have built-in migration for now"
20
+ end
21
+
22
+ desc "Generate model lib form and filters classes based on your schema"
23
+ task :build_classes do
24
+ run "php #{latest_release}/symfony propel:build --model --env=#{symfony_env_prod}"
25
+ run "php #{latest_release}/symfony propel:build --forms --env=#{symfony_env_prod}"
26
+ run "php #{latest_release}/symfony propel:build --filters --env=#{symfony_env_prod}"
27
+ end
28
+
29
+ desc "Generate code & database based on your schema"
30
+ task :build_all do
31
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database? (y/N)")
32
+ run "cd #{latest_release} && #{php_bin} ./symfony propel:build --sql --db --no-confirmation --env=#{symfony_env_prod}"
33
+ end
34
+ end
35
+
36
+ desc "Generate code & database based on your schema & load fixtures"
37
+ task :build_all_and_load do
38
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database and load #{symfony_env_prod}'s fixtures? (y/N)")
39
+ run "cd #{latest_release} && #{php_bin} ./symfony propel:build --sql --db --and-load --no-confirmation --env=#{symfony_env_prod}"
40
+ end
41
+ end
42
+
43
+ desc "Generate sql & database based on your schema"
44
+ task :build_db do
45
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database? (y/N)")
46
+ run "cd #{latest_release} && #{php_bin} ./symfony propel:build --sql --db --no-confirmation --env=#{symfony_env_prod}"
47
+ end
48
+ end
49
+
50
+ desc "Generate sql & database based on your schema & load fixtures"
51
+ task :build_db_and_load do
52
+ if Capistrano::CLI.ui.agree("Do you really want to rebuild #{symfony_env_prod}'s database and load #{symfony_env_prod}'s fixtures? (y/N)")
53
+ run "cd #{latest_release} && #{php_bin} ./symfony propel:build --sql --db --and-load --no-confirmation --env=#{symfony_env_prod}"
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ namespace :shared do
2
+ namespace :databases do
3
+ desc "Download config/databases.yml from remote server"
4
+ task :to_local do
5
+ download("#{shared_path}/config/databases.yml", "config/databases.yml", :via => :scp)
6
+ end
7
+
8
+ desc "Upload config/databases.yml to remote server"
9
+ task :to_remote do
10
+ upload("config/databases.yml", "#{shared_path}/config/databases.yml", :via => :scp)
11
+ end
12
+ end
13
+
14
+ namespace :log do
15
+ desc "Download all logs from remote folder to local one"
16
+ task :to_local do
17
+ download("#{shared_path}/log", "./", :via => :scp, :recursive => true)
18
+ end
19
+
20
+ desc "Upload all logs from local folder to remote one"
21
+ task :to_remote do
22
+ upload("log", "#{shared_path}/", :via => :scp, :recursive => true)
23
+ end
24
+ end
25
+
26
+ namespace :uploads do
27
+ desc "Download all files from remote web/uploads folder to local one"
28
+ task :to_local do
29
+ download("#{shared_path}/web/uploads", "web", :via => :scp, :recursive => true)
30
+ end
31
+
32
+ desc "Upload all files from local web/uploads folder to remote one"
33
+ task :to_remote do
34
+ upload("web/uploads", "#{shared_path}/web", :via => :scp, :recursive => true)
35
+ end
36
+ end
37
+
38
+ namespace :symfony do
39
+ desc "Downloads symfony framework to shared directory"
40
+ task :download do
41
+ prompt_with_default(:version, symfony_version)
42
+
43
+ run <<-CMD
44
+ if [ ! -d #{shared_path}/symfony-#{version} ]; then
45
+ wget -q http://www.symfony-project.org/get/symfony-#{version}.tgz -O- | tar -zxf - -C #{shared_path};
46
+ fi
47
+ CMD
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,187 @@
1
+ namespace :symfony do
2
+ desc "Runs custom symfony task"
3
+ task :default do
4
+ prompt_with_default(:task_arguments, "cache:clear")
5
+
6
+ stream "cd #{latest_release} && #{php_bin} ./symfony #{task_arguments}"
7
+ end
8
+
9
+ desc "Downloads & runs check_configuration.php on remote"
10
+ task :check_configuration do
11
+ prompt_with_default(:version, "1.4")
12
+
13
+ run "wget http://sf-to.org/#{version}/check.php -O /tmp/check_configuration.php"
14
+ stream "#{php_bin} /tmp/check_configuration.php"
15
+ run "rm /tmp/check_configuration.php"
16
+ end
17
+
18
+ desc "Clears the cache"
19
+ task :cc do
20
+ run "cd #{latest_release} && #{try_sudo} #{php_bin} ./symfony cache:clear"
21
+ run "chmod -R g+w #{latest_release}/cache"
22
+ end
23
+
24
+ desc "Creates symbolic link to symfony lib in shared"
25
+ task :create_lib_symlink do
26
+ prompt_with_default(:version, symfony_version)
27
+ symlink_path = "#{latest_release}/lib/vendor/symfony"
28
+
29
+ run "if [ ! -d #{shared_path}/symfony-#{version} ]; then exit 1; fi;"
30
+ run "ln -nfs #{shared_path}/symfony-#{version} #{symlink_path};"
31
+ end
32
+
33
+ namespace :configure do
34
+ desc "Configure database DSN"
35
+ task :database do
36
+ prompt_with_default(:dsn, "mysql:host=localhost;dbname=#{application}")
37
+ prompt_with_default(:db_username, "root")
38
+ db_password = Capistrano::CLI.password_prompt("db_password : ")
39
+
40
+ # surpress debug log output to hide the password
41
+ current_logger_level = self.logger.level
42
+ if current_logger_level >= Capistrano::Logger::DEBUG
43
+ logger.debug %(executing "cd #{latest_release} && #{php_bin} ./symfony configure:database '#{dsn}' '#{db_username}' ***")
44
+ self.logger.level = Capistrano::Logger::INFO
45
+ end
46
+
47
+ stream "cd #{latest_release} && #{php_bin} ./symfony configure:database '#{dsn}' '#{db_username}' '#{db_password}'"
48
+
49
+ # restore logger level
50
+ self.logger.level = current_logger_level
51
+ end
52
+ end
53
+
54
+ namespace :project do
55
+ desc "Disables an application in a given environment"
56
+ task :disable do
57
+ run "cd #{latest_release} && #{php_bin} ./symfony project:disable #{symfony_env_prod}"
58
+ end
59
+
60
+ desc "Enables an application in a given environment"
61
+ task :enable do
62
+ run "cd #{latest_release} && #{php_bin} ./symfony project:enable #{symfony_env_prod}"
63
+ end
64
+
65
+ desc "Fixes symfony directory permissions"
66
+ task :permissions do
67
+ run "cd #{latest_release} && #{php_bin} ./symfony project:permissions"
68
+ end
69
+
70
+ desc "Optimizes a project for better performance"
71
+ task :optimize do
72
+ prompt_with_default(:application, "frontend")
73
+
74
+ run "cd #{latest_release} && #{php_bin} ./symfony project:optimize #{application}"
75
+ end
76
+
77
+ desc "Clears all non production environment controllers"
78
+ task :clear_controllers do
79
+ run "cd #{latest_release} && #{php_bin} ./symfony project:clear-controllers"
80
+ end
81
+
82
+ desc "Sends emails stored in a queue"
83
+ task :send_emails do
84
+ prompt_with_default(:message_limit, 10)
85
+ prompt_with_default(:time_limit, 10)
86
+
87
+ stream "cd #{latest_release} && #{php_bin} ./symfony project:send-emails --message-limit=#{message_limit} --time-limit=#{time_limit} --env=#{symfony_env_prod}"
88
+ end
89
+
90
+ desc 'Task to set all front controllers to a specific environment'
91
+ task :set_environment do
92
+ if (env = fetch(:symfony_env_prod, nil)) && env != 'prod'
93
+ cmd = []
94
+ apps = fetch(:symfony_apps, ['frontend'])
95
+
96
+ # First application listed becomes index.php
97
+ if app = apps.shift
98
+ cmd << "cp #{release_path}/web/#{app}_#{env}.php #{release_path}/web/index.php"
99
+ end
100
+
101
+ # All other apps are copied to their default controllers
102
+ for app in apps
103
+ cmd << "cp #{release_path}/web/#{app}_#{env}.php #{release_path}/web/#{app}.php"
104
+ end
105
+
106
+ run cmd.join(';') if cmd.join(';')
107
+ end
108
+ end
109
+ end
110
+
111
+ namespace :plugin do
112
+ desc "Publishes web assets for all plugins"
113
+ task :publish_assets do
114
+ run "cd #{latest_release} && #{php_bin} ./symfony plugin:publish-assets"
115
+ end
116
+ end
117
+
118
+ namespace :log do
119
+ desc "Clears log files"
120
+ task :clear do
121
+ run "cd #{latest_release} && #{php_bin} ./symfony log:clear"
122
+ end
123
+
124
+ desc "Rotates an application's log files"
125
+ task :rotate do
126
+ prompt_with_default(:application, "frontend")
127
+
128
+ run "cd #{latest_release} && #{php_bin} ./symfony log:rotate #{application} #{symfony_env_prod}"
129
+ end
130
+ end
131
+
132
+ namespace :tests do
133
+ desc "Launches all tests"
134
+ task :all do
135
+ run "cd #{latest_release} && #{php_bin} ./symfony test:all"
136
+ end
137
+
138
+ desc "Launches functional tests"
139
+ task :functional do
140
+ prompt_with_default(:application, "frontend")
141
+
142
+ run "cd #{latest_release} && #{php_bin} ./symfony test:functional #{application}"
143
+ end
144
+
145
+ desc "Launches unit tests"
146
+ task :unit do
147
+ run "cd #{latest_release} && #{php_bin} ./symfony test:unit"
148
+ end
149
+ end
150
+
151
+ namespace :orm do
152
+ desc "Ensure symfony ORM is properly configured"
153
+ task :setup do
154
+ find_and_execute_task("symfony:#{symfony_orm}:setup")
155
+ end
156
+
157
+ desc "Migrates database to current version"
158
+ task :migrate do
159
+ find_and_execute_task("symfony:#{symfony_orm}:migrate")
160
+ end
161
+
162
+ desc "Generate model lib form and filters classes based on your schema"
163
+ task :build_classes do
164
+ find_and_execute_task("symfony:#{symfony_orm}:build_classes")
165
+ end
166
+
167
+ desc "Generate code & database based on your schema"
168
+ task :build_all do
169
+ find_and_execute_task("symfony:#{symfony_orm}:build_all")
170
+ end
171
+
172
+ desc "Generate code & database based on your schema & load fixtures"
173
+ task :build_all_and_load do
174
+ find_and_execute_task("symfony:#{symfony_orm}:build_all_and_load")
175
+ end
176
+
177
+ desc "Generate sql & database based on your schema"
178
+ task :build_db do
179
+ find_and_execute_task("symfony:#{symfony_orm}:build_db")
180
+ end
181
+
182
+ desc "Generate sql & database based on your schema & load fixtures"
183
+ task :build_db_and_load do
184
+ find_and_execute_task("symfony:#{symfony_orm}:build_db_and_load")
185
+ end
186
+ end
187
+ end