-
Notifications
You must be signed in to change notification settings - Fork 217
/
symfony2.rb
242 lines (203 loc) · 8.54 KB
/
symfony2.rb
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
load Gem.required_location('capifony', 'capifony.rb')
# Symfony application path
set :app_path, "app"
# Symfony web path
set :web_path, "web"
# Use AsseticBundle
set :dump_assetic_assets, false
# Dirs that need to remain the same between deploys (shared dirs)
set :shared_children, [app_path + "/logs", web_path + "/uploads"]
# Files that need to remain the same between deploys
set :shared_files, false
# Asset folders (that need to be timestamped)
set :asset_children, [web_path + "/css", web_path + "/images", web_path + "/js"]
namespace :deploy do
desc "Symlink static directories and static files that need to remain between deployments."
task :share_childs do
if shared_children
shared_children.each do |link|
run "mkdir -p #{shared_path}/#{link}"
run "if [ -d #{release_path}/#{link} ] ; then rm -rf #{release_path}/#{link}; fi"
run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
end
end
if shared_files
shared_files.each do |link|
link_dir = File.dirname("#{shared_path}/#{link}")
run "mkdir -p #{link_dir}"
run "touch #{shared_path}/#{link}"
run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
end
end
end
desc "Update latest release source path."
task :finalize_update, :except => { :no_release => true } do
run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
run "if [ -d #{latest_release}/#{app_path}/cache ] ; then rm -rf #{latest_release}/#{app_path}/cache; fi"
run "mkdir -p #{latest_release}/#{app_path}/cache && chmod -R 0777 #{latest_release}/#{app_path}/cache"
share_childs
if fetch(:normalize_asset_timestamps, true)
stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S")
asset_paths = asset_children.map { |p| "#{latest_release}/#{p}" }.join(" ")
run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env => { "TZ" => "UTC" }
end
end
desc "Deploy the application and start it."
task :cold do
update
start
end
desc "Deploy the application and run the test suite."
task :testall do
update_code
symlink
run "cd #{latest_release} && phpunit -c #{app_path} src"
end
desc "Migrate Symfony2 Doctrine ORM database."
task :migrate do
currentVersion = nil
run "#{php-bin} #{app-path}/console doctrine:migrations:status --env=#{symfony_env_prod}" do |ch, stream, out|
if stream == :out and out =~ /Current Version:[^$]+\(([0-9]+)\)/
currentVersion = Regexp.last_match(1)
end
if stream == :out and out =~ /Current Version:\s*0\s*$/
currentVersion = 0
end
end
if currentVersion == nil
raise "Could not find current database migration version"
end
puts "Current database version #{currentVersion}"
on_rollback {
run "#{php-bin} #{app-path}/console doctrine:migrations:migrate #{currentVersion} --env=#{symfony_env_prod}" do |ch, stream, out|
if out =~ /Are you sure you wish to continue/
ch.send_data("y\r\n")
end
end
}
run "#{php-bin} #{app-path}/console doctrine:migrations:migrate --env=#{symfony_env_prod}" do |ch, stream, out|
if out =~ /Are you sure you wish to continue/
ch.send_data("y\r\n")
end
end
end
end
namespace :symfony do
desc "Runs custom symfony task"
task :default do
prompt_with_default(:task_arguments, "cache:clear")
stream "cd #{latest_release} && #{php_bin} #{app_path}/console #{task_arguments} --env=#{symfony_env_prod}"
end
namespace :assets do
desc "Install bundle's assets"
task :install do
run "cd #{latest_release} && #{php_bin} #{app_path}/console assets:install #{web_path} --env=#{symfony_env_prod}"
end
end
namespace :assetic do
desc "Dumps all assets to the filesystem"
task :dump do
run "cd #{latest_release} && #{php_bin} #{app_path}/console assetic:dump #{web_path} --env=#{symfony_env_prod}"
end
end
namespace :cache do
desc "Clears project cache."
task :clear do
run "cd #{latest_release} && #{php_bin} #{app_path}/console cache:clear --env=#{symfony_env_prod}"
end
desc "Warms up an empty cache."
task :warmup do
run "cd #{latest_release} && #{php_bin} #{app_path}/console cache:warmup --env=#{symfony_env_prod}"
end
end
namespace :doctrine do
namespace :cache do
desc "Clear all metadata cache for a entity manager."
task :clear_metadata do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:cache:clear-metadata --env=#{symfony_env_prod}"
end
desc "Clear all query cache for a entity manager."
task :clear_query do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:cache:clear-query --env=#{symfony_env_prod}"
end
desc "Clear result cache for a entity manager."
task :clear_result do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:cache:clear-result --env=#{symfony_env_prod}"
end
end
namespace :database do
desc "Create the configured databases."
task :create do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:database:create --env=#{symfony_env_prod}"
end
desc "Drop the configured databases."
task :drop do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:database:drop --env=#{symfony_env_prod}"
end
end
namespace :generate do
desc "Generates proxy classes for entity classes."
task :hydrators do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:generate:proxies --env=#{symfony_env_prod}"
end
desc "Generate repository classes from your mapping information."
task :hydrators do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:generate:repositories --env=#{symfony_env_prod}"
end
end
namespace :schema do
desc "Processes the schema and either create it directly on EntityManager Storage Connection or generate the SQL output."
task :create do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:schema:create --env=#{symfony_env_prod}"
end
desc "Drop the complete database schema of EntityManager Storage Connection or generate the corresponding SQL output."
task :drop do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:schema:drop --env=#{symfony_env_prod}"
end
end
namespace :migrations do
desc "Execute a migration to a specified version or the latest available version."
task :migrate do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:migrations:migrate --env=#{symfony_env_prod}"
end
desc "View the status of a set of migrations."
task :status do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:migrations:status --env=#{symfony_env_prod}"
end
end
namespace :mongodb do
namespace :generate do
desc "Generates hydrator classes for document classes."
task :hydrators do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:mongodb:generate:hydrators --env=#{symfony_env_prod}"
end
desc "Generates proxy classes for document classes."
task :hydrators do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:mongodb:generate:proxies --env=#{symfony_env_prod}"
end
desc "Generates repository classes for document classes."
task :hydrators do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:mongodb:generate:repositories --env=#{symfony_env_prod}"
end
end
namespace :schema do
desc "Allows you to create databases, collections and indexes for your documents."
task :create do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:mongodb:schema:create --env=#{symfony_env_prod}"
end
desc "Allows you to drop databases, collections and indexes for your documents."
task :drop do
run "cd #{latest_release} && #{php_bin} #{app_path}/console doctrine:mongodb:schema:drop --env=#{symfony_env_prod}"
end
end
end
end
end
# After finalizing update:
after "deploy:finalize_update" do
symfony.cache.warmup # 1. Warmup clean cache
symfony.assets.install # 2. Publish bundle assets
if dump_assetic_assets
symfony.assetic.dump # 3. Dump assetic assets
end
end