capifony 2.1.7 → 2.1.8

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.
@@ -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