zena 0.16.8 → 0.16.9

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.16.9 2010-09-29
2
+
3
+ * 1 major enhancement
4
+ * fixed deploy rules for mongrel and passenger
5
+ * fixed RubyLess dependency (breaks with newer versions)
6
+
1
7
  == 0.16.8 2010-08-30
2
8
 
3
9
  * 1 minor enhancement
data/config/deploy.rb CHANGED
@@ -9,8 +9,9 @@ set :repository, "http://svn.zenadmin.org/zena/trunk"
9
9
  if self[:server_ip]
10
10
  #================= ADVANCED SETTINGS =============#
11
11
 
12
- set :deploy_to, "/var/zena"
13
- set :sites_root, "/var/www/zena"
12
+ set :deploy_to, "/home/#{db_name}/app"
13
+ set :sites_root, "/home/#{db_name}/sites"
14
+
14
15
  set :vhost_root, "/etc/apache2/sites-available"
15
16
  set :deflate, true
16
17
  set :debug_deflate, false
@@ -40,6 +41,10 @@ if self[:server_ip]
40
41
  require deploy_path
41
42
  else
42
43
  # Zena app, using zena as gem
44
+ env = File.read(File.join(File.dirname(__FILE__), 'environment.rb'))
45
+ if env =~ /config.gem.*zena.*version.*'(.*?)'/
46
+ gem 'zena', "= #{$1}"
47
+ end
43
48
  require 'zena/deploy'
44
49
  end
45
50
 
data/config/gems.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  hpricot:
2
2
  gettext: '>= 1.93.0'
3
3
  querybuilder: '= 0.5.9'
4
- rubyless: '>= 0.3.5'
4
+ rubyless: '= 0.3.5'
5
5
  ruby-recaptcha: '= 1.0.0'
6
6
  syntax: '= 1.0.0'
7
7
  tzinfo: '>= 0.3.12'
data/db/schema.rb CHANGED
@@ -80,19 +80,6 @@ ActiveRecord::Schema.define(:version => 20100115134729) do
80
80
  t.decimal "value_b", :precision => 24, :scale => 8
81
81
  end
82
82
 
83
- create_table "delayed_jobs", :force => true do |t|
84
- t.integer "priority", :default => 0
85
- t.integer "attempts", :default => 0
86
- t.text "handler"
87
- t.text "last_error"
88
- t.datetime "run_at"
89
- t.datetime "locked_at"
90
- t.datetime "failed_at"
91
- t.string "locked_by"
92
- t.datetime "created_at"
93
- t.datetime "updated_at"
94
- end
95
-
96
83
  create_table "discussions", :force => true do |t|
97
84
  t.datetime "created_at"
98
85
  t.datetime "updated_at"
@@ -189,7 +176,6 @@ ActiveRecord::Schema.define(:version => 20100115134729) do
189
176
  t.integer "custom_a"
190
177
  t.integer "custom_b"
191
178
  t.text "vhash"
192
- t.boolean "delta", :default => true, :null => false
193
179
  end
194
180
 
195
181
  create_table "relations", :force => true do |t|
data/lib/zena/deploy.rb CHANGED
@@ -30,14 +30,20 @@ Capistrano::Configuration.instance(:must_exist).load do
30
30
 
31
31
  set :templates, File.join(File.dirname(__FILE__), 'deploy')
32
32
  self[:app_type] ||= :mongrel
33
- self[:app_root] ||= '/var/zena/current'
34
- self[:sites_root] ||= '/var/www/zena'
33
+
34
+ self[:deploy_to] ||= "/home/#{db_name}/app"
35
+ self[:sites_root] ||= "/home/#{db_name}/sites"
36
+ self[:dump_root] ||= "/home/#{db_name}/dump"
37
+
38
+ self[:app_root] ||= "#{deploy_to}/current"
39
+
35
40
  self[:balancer] ||= db_name
41
+ self[:db_user] ||= db_name
36
42
  self[:runner] ||= 'root'
37
43
  self[:on_stop] = []
38
44
  self[:on_start] = []
39
45
 
40
- set :in_current, "cd #{deploy_to}/current &&"
46
+ set :in_current, "cd #{app_root} &&"
41
47
 
42
48
  class RenderClass
43
49
  def initialize(path)
@@ -67,12 +73,29 @@ Capistrano::Configuration.instance(:must_exist).load do
67
73
  self[:on_start] << block
68
74
  end
69
75
 
76
+ def ancestry(path)
77
+ # Build directory ancestry ['/a', '/a/b', '/a/b/c']
78
+ paths = path.split('/')[1..-1].inject(['']) do |res, cur|
79
+ res << (res.last + "/#{cur}")
80
+ res
81
+ end[1..-1]
82
+ end
83
+
70
84
  #========================== SOURCE CODE =========================#
71
85
 
72
86
 
73
87
  desc "set permissions to www-data"
74
88
  task :set_permissions, :roles => :app do
75
- run "chown -R www-data:www-data #{deploy_to}/current/public #{deploy_to}/current/log #{deploy_to}/current/tmp"
89
+ directories = [
90
+ 'current/public',
91
+ 'current/tmp',
92
+ 'current/log',
93
+ 'shared/log',
94
+ ].map {|dir| "#{deploy_to}/#{dir}"}
95
+
96
+ # make sure production.log is created before so that it gets the correct permissions
97
+ run "touch #{deploy_to}/shared/log/production.log"
98
+ run "chown -R www-data:www-data #{directories.join(' ')}"
76
99
  end
77
100
 
78
101
  "Update the currently released version of the software directly via an SCM update operation"
@@ -93,7 +116,7 @@ Capistrano::Configuration.instance(:must_exist).load do
93
116
  desc "after code update"
94
117
  task :after_update, :roles => :app do
95
118
  app_update_symlinks
96
- db_update_config
119
+ db::update_config
97
120
  apache2_setup
98
121
  migrate
99
122
  clear_zafu
@@ -102,7 +125,7 @@ Capistrano::Configuration.instance(:must_exist).load do
102
125
 
103
126
  desc "update symlink to 'sites' directory"
104
127
  task :app_update_symlinks, :roles => :app do
105
- run "test ! -e #{deploy_to}/current/sites || rm #{deploy_to}/current/sites"
128
+ run "test ! -e #{deploy_to}/current/sites || rm -rf #{deploy_to}/current/sites || true"
106
129
  run "ln -sf #{sites_root} #{deploy_to}/current/sites"
107
130
  set_permissions
108
131
  end
@@ -114,10 +137,11 @@ Capistrano::Configuration.instance(:must_exist).load do
114
137
 
115
138
  desc "initial app setup"
116
139
  task :app_setup, :roles => :app do
117
- gem_update
118
- run "test -e #{deploy_to} || mkdir #{deploy_to}"
119
- run "test -e #{sites_root} || mkdir #{sites_root}"
120
- deploy::setup
140
+ paths = ancestry(deploy_to) + ancestry(sites_root) + ancestry("#{deploy_to}/shared/log") + ancestry(dump_root)
141
+
142
+ paths.uniq.sort.each do |dir|
143
+ run "test -e #{dir} || mkdir #{dir}"
144
+ end
121
145
  end
122
146
 
123
147
  #========================== MANAGE HOST =========================#
@@ -133,7 +157,7 @@ Capistrano::Configuration.instance(:must_exist).load do
133
157
  desc "update code in the current version"
134
158
  task :up, :roles => :app do
135
159
  run "cd #{deploy_to}/current && #{self[:scm] == 'git' ? "git pull origin #{self[:branch] || 'master'}" : 'svn up'} && (echo #{strategy.configuration[:real_revision]} > #{deploy_to}/current/REVISION)"
136
- db_update_config
160
+ db::update_config
137
161
  clear_zafu
138
162
  clear_cache
139
163
  migrate
@@ -173,9 +197,7 @@ Capistrano::Configuration.instance(:must_exist).load do
173
197
  run "test -e /etc/apache2/sites-enabled/#{self[:host]} || a2ensite #{self[:host]}" if debian_host
174
198
 
175
199
  unless self[:host] =~ /^www/
176
- vhost_www = render("#{templates}/vhost_www.rhtml",
177
- :host => self[:host]
178
- )
200
+ vhost_www = render("#{templates}/vhost_www.rhtml", :config => self)
179
201
  put(vhost_www, "#{vhost_root}/www.#{self[:host]}")
180
202
  run "test -e /etc/apache2/sites-enabled/www.#{self[:host]} || a2ensite www.#{self[:host]}" if debian_host
181
203
  end
@@ -193,13 +215,13 @@ Capistrano::Configuration.instance(:must_exist).load do
193
215
  puts "host or password not set (use -s host=... -s pass=...)"
194
216
  else
195
217
  # create awstats config file
196
- awstats_conf = render("#{templates}/awstats.conf.rhtml", :host => self[:host] )
218
+ awstats_conf = render("#{templates}/awstats.conf.rhtml", :config => self)
197
219
  put(awstats_conf, "/etc/awstats/awstats.#{self[:host]}.conf")
198
220
  run "chown www-data:www-data /etc/awstats/awstats.#{self[:host]}.conf"
199
221
  run "chmod 640 /etc/awstats/awstats.#{self[:host]}.conf"
200
222
 
201
223
  # create stats vhost
202
- stats_vhost = render("#{templates}/stats.vhost.rhtml", :host => self[:host] )
224
+ stats_vhost = render("#{templates}/stats.vhost.rhtml", :config => self)
203
225
  put(stats_vhost, "#{vhost_root}/stats.#{self[:host]}")
204
226
  run "test -e /etc/apache2/sites-enabled/stats.#{self[:host]} || a2ensite stats.#{self[:host]}"
205
227
 
@@ -211,7 +233,7 @@ Capistrano::Configuration.instance(:must_exist).load do
211
233
  run "cat /etc/cron.d/awstats | grep \"#{self[:host]}\" || echo \"0,10,20,30,40,50 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.#{self[:host]}.conf -a -r #{sites_root}/#{self[:host]}/log/apache2.access.log ] && /usr/lib/cgi-bin/awstats.pl -config=#{self[:host]} -update >/dev/null\n\" >> /etc/cron.d/awstats"
212
234
 
213
235
  # create .htpasswd file
214
- run "test ! -e #{sites_root}/#{self[:host]}/log/.awstatspw || rm #{sites_root}/#{self[:host]}/log/.awstatspw"
236
+ run "test ! -e #{sites_root}/#{self[:host]}/log/.awstatspw || rm #{sites_root}/#{self[:host]}/log/.awstatspw || true"
215
237
  run "htpasswd -c -b #{sites_root}/#{self[:host]}/log/.awstatspw 'admin' '#{self[:pass]}'"
216
238
  run "chmod 600 #{sites_root}/#{self[:host]}/log/.awstatspw"
217
239
  run "chown www-data:www-data #{sites_root}/#{self[:host]}/log/.awstatspw"
@@ -269,7 +291,9 @@ Capistrano::Configuration.instance(:must_exist).load do
269
291
 
270
292
  desc "Apache2 initial setup"
271
293
  task :apache2_setup, :roles => :web do
272
- self[:ports] = (mongrel_port.to_i...(mongrel_port.to_i + mongrel_count.to_i)).to_a
294
+ if self[:mongrel_port]
295
+ self[:ports] = (mongrel_port.to_i...(mongrel_port.to_i + mongrel_count.to_i)).to_a
296
+ end
273
297
  httpd_conf = render("#{templates}/httpd.rhtml", :config => self)
274
298
  log_rotate = render("#{templates}/logrotate_app.rhtml", :config => self)
275
299
  if debian_host
@@ -293,26 +317,25 @@ Capistrano::Configuration.instance(:must_exist).load do
293
317
 
294
318
  desc "install zena gem on remote server"
295
319
  task :gem_update, :roles => :app do
296
- run "gem sources -a http://gems.github.com"
297
320
  run "gem install zena"
298
321
  end
299
322
 
300
323
  #========================== MYSQL ===============================#
301
324
 
302
- desc "set database.yml file according to settings"
303
- task :db_update_config, :roles => :app do
304
- db_app_config = render("#{templates}/database.rhtml",
305
- :db_name => db_name,
306
- :db_user => db_user,
307
- :db_password => db_password
308
- )
309
- put(db_app_config, "#{deploy_to}/current/config/database.yml")
310
- end
325
+ namespace :db do
326
+ desc "set database.yml file according to settings"
327
+ task :update_config, :roles => :app do
328
+ db_app_config = render("#{templates}/database.rhtml",
329
+ :db_name => db_name,
330
+ :db_user => db_user,
331
+ :db_password => db_password
332
+ )
333
+ put(db_app_config, "#{deploy_to}/current/config/database.yml")
334
+ end
311
335
 
312
- desc "create database"
313
- task :db_create, :roles => :db do
314
- on_rollback do
315
- run "mysql -u root -p -e \"DROP DATABASE #{db_name};\"" do |channel, stream, data|
336
+ desc "create database"
337
+ task :create, :roles => :db do
338
+ run "mysql -u root -p -e \"CREATE DATABASE #{db_name} DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; GRANT ALL ON #{db_name}.* TO '#{db_user}'@'localhost' IDENTIFIED BY '#{db_password}';\"" do |channel, stream, data|
316
339
  if data =~ /^Enter password:\s*/m
317
340
  logger.info "#{channel[:host]} asked for password"
318
341
  channel.send_data "#{password}\n"
@@ -321,121 +344,156 @@ Capistrano::Configuration.instance(:must_exist).load do
321
344
  end
322
345
  end
323
346
 
324
- run "mysql -u root -p -e \"CREATE DATABASE #{db_name} DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; GRANT ALL ON #{db_name}.* TO '#{db_user}'@'localhost' IDENTIFIED BY '#{db_password}';\"" do |channel, stream, data|
325
- if data =~ /^Enter password:\s*/m
326
- logger.info "#{channel[:host]} asked for password"
327
- channel.send_data "#{password}\n"
347
+ desc "drop database"
348
+ task :drop, :roles => :db do
349
+ run "mysql -u root -p -e \"DROP DATABASE #{db_name};\"" do |channel, stream, data|
350
+ if data =~ /^Enter password:\s*/m
351
+ logger.info "#{channel[:host]} asked for password"
352
+ channel.send_data "#{password}\n"
353
+ end
354
+ puts data
328
355
  end
329
- puts data
330
356
  end
331
- end
332
357
 
333
- desc "initial database setup"
334
- task :db_setup, :roles => :db do
335
- transaction do
336
- db_create
358
+ desc "initial database setup"
359
+ task :setup, :roles => :db do
360
+ create
337
361
  end
338
- end
339
-
340
362
 
341
- desc "Full initial setup"
342
- task :initial_setup do
343
- transaction do
344
- app_setup
363
+ desc "Database dump"
364
+ task :dump, :roles => :db do
365
+ run "mysqldump #{db_name} -u root -p | /bin/gzip > #{dump_root}/`date +%Y-%m-%d_%H:%M`.sql.gz" do |channel, stream, data|
366
+ if data =~ /^Enter password:\s*/m
367
+ logger.info "#{channel[:host]} asked for password"
368
+ channel.send_data "#{password}\n"
369
+ end
370
+ puts data
371
+ end
372
+ end
373
+ end # db
374
+
375
+ # Would need to be fixed before being used
376
+ #
377
+ # desc "Get backup file back"
378
+ # task :get_backup, :roles => :app do
379
+ # get "#{deploy_to}/current/#{db_name}_data.tgz", "./#{db_name}_#{Time.now.strftime '%Y-%m-%d-%H'}.tgz"
380
+ # end
381
+ #
382
+ # # FIXME: backup not loading data for every site...
383
+ # desc "Backup all data and bring it backup here"
384
+ # task :backup, :roles => :app do
385
+ # db_dump
386
+ # # key track of the current svn revision for app
387
+ #
388
+ # run "#{in_current} svn info > #{deploy_to}/current/zena_version.txt"
389
+ # run "#{in_current} rake zena:full_backup RAILS_ENV='production'"
390
+ # run "#{in_current} tar czf #{db_name}_data.tgz #{db_name}.sql.tgz sites_data.tgz zena_version.txt"
391
+ # get_backup
392
+ # end
393
+ case self[:app_type]
394
+ when :mongrel
395
+ #========================== MONGREL ===============================#
396
+ namespace :app do
397
+
398
+ desc "configure mongrel"
399
+ task :configure, :roles => :app do
400
+ run "#{in_current} mongrel_rails cluster::configure -e production -p #{mongrel_port} -N #{mongrel_count} -c #{deploy_to}/current -P log/mongrel.pid -l log/mongrel.log -a 127.0.0.1 --user www-data --group www-data"
401
+ run "#{in_current} echo 'config_script: config/mongrel_upload_progress.conf' >> config/mongrel_cluster.yml"
402
+ end
345
403
 
346
- db_setup
404
+ desc "Stop the drb upload_progress server"
405
+ task :upload_progress_stop , :roles => :app do
406
+ run "#{in_current} ruby lib/upload_progress_server.rb stop"
407
+ end
347
408
 
348
- deploy::update
409
+ desc "Start the drb upload_progress server"
410
+ task :upload_progress_start , :roles => :app do
411
+ run "#{in_current} lib/upload_progress_server.rb start"
412
+ end
349
413
 
350
- apache2_setup
414
+ desc "Restart the upload_progress server"
415
+ task :upload_progress_restart, :roles => :app do
416
+ upload_progress_stop
417
+ upload_progress_start
418
+ end
351
419
 
352
- set_permissions
420
+ desc "Restart mongrels"
421
+ task :restart, :roles => :app do
422
+ stop
423
+ start
424
+ end
353
425
 
354
- start
355
- end
356
- end
426
+ desc "Start mongrels"
427
+ task :start, :roles => :app do
428
+ configure
429
+ upload_progress_start
430
+ run "#{in_current} mongrel_rails cluster::start"
431
+ end
357
432
 
358
- desc "Database dump"
359
- task :db_dump, :roles => :db do
360
- run "mysqldump #{db_name} -u root -p > #{deploy_to}/current/#{db_name}.sql" do |channel, stream, data|
361
- if data =~ /^Enter password:\s*/m
362
- logger.info "#{channel[:host]} asked for password"
363
- channel.send_data "#{password}\n"
433
+ desc "Stop mongrels"
434
+ task :stop, :roles => :app do
435
+ configure
436
+ upload_progress_stop
437
+ run "#{in_current} mongrel_rails cluster::stop"
438
+ end
439
+ end # mongrel
440
+ when :passenger
441
+ namespace :upload_progress do
442
+ desc "Build and install upload progress extension for Apache2"
443
+ task :setup, :roles => :app do
444
+ tmp_dir = "/tmp/mod_upload_progress.tmp"
445
+ c_file = File.read("#{Zena::ROOT}/vendor/apache2_upload_progress/mod_upload_progress.c")
446
+ run "test -e #{tmp_dir} || mkdir #{tmp_dir}"
447
+ put c_file, "#{tmp_dir}/mod_upload_progress.c"
448
+ run "cd #{tmp_dir} && apxs2 -c -i mod_upload_progress.c && rm -rf #{tmp_dir}"
364
449
  end
365
- puts data
366
450
  end
367
- run "#{in_current} tar czf #{db_name}.sql.tgz #{db_name}.sql"
368
- run "#{in_current} rm #{db_name}.sql"
369
- end
370
451
 
371
- desc "Get backup file back"
372
- task :get_backup, :roles => :app do
373
- get "#{deploy_to}/current/#{db_name}_data.tgz", "./#{db_name}_#{Time.now.strftime '%Y-%m-%d-%H'}.tgz"
374
- end
452
+ before "zena:setup", "upload_progress:setup"
375
453
 
376
- # FIXME: backup not loading data for every site...
377
- desc "Backup all data and bring it backup here"
378
- task :backup, :roles => :app do
379
- db_dump
380
- # key track of the current svn revision for app
454
+ namespace :app do
381
455
 
382
- run "#{in_current} svn info > #{deploy_to}/current/zena_version.txt"
383
- run "#{in_current} rake zena:full_backup RAILS_ENV='production'"
384
- run "#{in_current} tar czf #{db_name}_data.tgz #{db_name}.sql.tgz sites_data.tgz zena_version.txt"
385
- get_backup
386
- end
387
-
388
- Bricks.load_misc('deploy')
456
+ desc "Restart Passenger app"
457
+ task :restart, :roles => :app do
458
+ stop
459
+ start
460
+ end
389
461
 
462
+ desc "Start Passenger app"
463
+ task :start, :roles => :app do
464
+ run "#{in_current} touch tmp/restart.txt"
465
+ end
390
466
 
391
- #========================== MONGREL ===============================#
392
- namespace :mongrel do
467
+ desc "Stop Passenger app (only halt upload DRB)"
468
+ task :stop, :roles => :app do
469
+ # Cannot stop
470
+ end
393
471
 
394
- desc "configure mongrel"
395
- task :configure, :roles => :app do
396
- run "#{in_current} mongrel_rails cluster::configure -e production -p #{mongrel_port} -N #{mongrel_count} -c #{deploy_to}/current -P log/mongrel.pid -l log/mongrel.log -a 127.0.0.1 --user www-data --group www-data"
397
- run "#{in_current} echo 'config_script: config/mongrel_upload_progress.conf' >> config/mongrel_cluster.yml"
398
- end
472
+ desc "Kill Passenger spawner"
473
+ task :kill, :roles => :app do
474
+ run "kill $( passenger-memory-stats | grep 'Passenger spawn server' | awk '{ print $1 }' )"
475
+ end
476
+ end # passenger
477
+ end
399
478
 
400
- desc "Stop the drb upload_progress server"
401
- task :upload_progress_stop , :roles => :app do
402
- run "#{in_current} ruby lib/upload_progress_server.rb stop"
403
- end
479
+ #========================== DEPLOY ===============================#
404
480
 
405
- desc "Start the drb upload_progress server"
406
- task :upload_progress_start , :roles => :app do
407
- run "#{in_current} lib/upload_progress_server.rb start"
408
- end
481
+ namespace :zena do
482
+ desc "Prepare server for deployment"
483
+ task :setup, :roles => :app do
484
+ transaction do
485
+ app_setup
409
486
 
410
- desc "Restart the upload_progress server"
411
- task :upload_progress_restart, :roles => :app do
412
- upload_progress_stop
413
- upload_progress_start
414
- end
487
+ db::setup
415
488
 
416
- desc "Restart mongrels"
417
- task :restart, :roles => :app do
418
- stop
419
- start
420
- end
421
-
422
- desc "Start mongrels"
423
- task :start, :roles => :app do
424
- configure
425
- upload_progress_start
426
- run "#{in_current} mongrel_rails cluster::start"
427
- end
428
-
429
- desc "Stop mongrels"
430
- task :stop, :roles => :app do
431
- configure
432
- upload_progress_stop
433
- run "#{in_current} mongrel_rails cluster::stop"
489
+ apache2_setup
490
+ end
434
491
  end
435
492
  end
436
493
 
437
- namespace :deploy do
494
+ before 'deploy:setup', 'zena:setup'
438
495
 
496
+ namespace :deploy do
439
497
  desc "Restart application"
440
498
  task :restart, :roles => :app do
441
499
 
@@ -446,12 +504,8 @@ Capistrano::Configuration.instance(:must_exist).load do
446
504
  self[:on_start].each do |block|
447
505
  block.call
448
506
  end
449
- case self[:app_type]
450
- when :mongrel
451
- mongrel.restart
452
- else
453
- puts "'#{self[:app_type]}' not supported."
454
- end
507
+
508
+ app.restart
455
509
  end
456
510
 
457
511
  desc "Start application"
@@ -461,12 +515,7 @@ Capistrano::Configuration.instance(:must_exist).load do
461
515
  block.call
462
516
  end
463
517
 
464
- case self[:app_type]
465
- when :mongrel
466
- mongrel.start
467
- else
468
- puts "'#{self[:app_type]}' not supported."
469
- end
518
+ app.start
470
519
  end
471
520
 
472
521
  desc "Stop application"
@@ -476,14 +525,8 @@ Capistrano::Configuration.instance(:must_exist).load do
476
525
  block.call
477
526
  end
478
527
 
479
- case self[:app_type]
480
- when :mongrel
481
- mongrel.stop
482
- else
483
- puts "'#{self[:app_type]}' not supported."
484
- end
528
+ app.stop
485
529
  end
486
530
 
487
- end
488
-
531
+ end # mongrel/deploy
489
532
  end
@@ -48,7 +48,7 @@
48
48
  # If there is several log files from load balancing servers :
49
49
  # Example: "/pathtotools/logresolvemerge.pl *.log |"
50
50
  #
51
- LogFile="/var/www/zena/<%= host %>/log/apache2.access.log"
51
+ LogFile="<%= config[:sites_root] %>/<%= config[:host] %>/log/apache2.access.log"
52
52
 
53
53
 
54
54
  # Enter the log file type you want to analyze.
@@ -150,7 +150,7 @@ LogSeparator=" "
150
150
  # Example: "ftp.domain.com"
151
151
  # Example: "domain.com"
152
152
  #
153
- SiteDomain="<%= host %>"
153
+ SiteDomain="<%= config[:host] %>"
154
154
 
155
155
 
156
156
  # Enter here all other possible domain names, addresses or virtual host
@@ -165,7 +165,7 @@ SiteDomain="<%= host %>"
165
165
  # Note: You can also use @/mypath/myfile if list of aliases are in a file.
166
166
  # Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]"
167
167
  #
168
- HostAliases="localhost 127.0.0.1 <%= host %> stats.<%= host %>"
168
+ HostAliases="localhost 127.0.0.1 <%= config[:host] %> stats.<%= config[:host] %>"
169
169
 
170
170
 
171
171
  # If you want to have hosts reported by name instead of ip address, AWStats
@@ -200,7 +200,7 @@ DNSLookup=2
200
200
  # Example: "C:/awstats_data_dir"
201
201
  # Default: "." (means same directory as awstats.pl)
202
202
  #
203
- DirData="/var/www/zena/<%= host %>/log/awstats"
203
+ DirData="<%= config[:sites_root] %>/<%= config[:host] %>/log/awstats"
204
204
 
205
205
 
206
206
  # Relative or absolute web URL of your awstats cgi-bin directory.
@@ -3,7 +3,8 @@
3
3
 
4
4
  NameVirtualHost *
5
5
  <% if config[:app_type] == :passenger %>
6
- LoadModule upload_progress_module <%= config[:app_root] %>/vendor/apache2_upload_progress/mod_upload_progress.so
6
+ LoadModule upload_progress_module /usr/lib/apache2/modules/mod_upload_progress.so
7
+ PassengerDefaultUser www-data
7
8
  <% elsif config[:app_type] == :mongrel %>
8
9
  <Proxy *>
9
10
  Order allow,deny
@@ -15,8 +16,11 @@ LoadModule upload_progress_module <%= config[:app_root] %>/vendor/apache2_upload
15
16
  <% end %>
16
17
 
17
18
  <ifmodule mode_expires.c>
18
- <filesmatch "\.(jpg|gif|png|css|js)$">
19
- ExpiresActive on
20
- ExpiresDefault "access plus 1 year"
21
- </filesmatch>
19
+ ExpiresActive on
20
+ ExpiresDefault A0
21
+ ExpiresByType image/jpeg "access plus 1 year"
22
+ ExpiresByType image/gif "access plus 1 year"
23
+ ExpiresByType image/png "access plus 1 year"
24
+ ExpiresByType text/css "access plus 1 year"
25
+ ExpiresByType application/x-javascript "access plus 1 year"
22
26
  </ifmodule>
@@ -1,19 +1,19 @@
1
- # zena awstats vhost for <%= host %>
1
+ # zena awstats vhost for <%= config[:host] %>
2
2
  # automatically generated file
3
3
 
4
4
  <VirtualHost *>
5
- ServerName stats.<%= host %>
5
+ ServerName stats.<%= config[:host] %>
6
6
 
7
7
  DocumentRoot /usr/share/doc/awstats/examples
8
- ErrorLog /var/www/zena/<%= host %>/log/apache2.error.log
9
- CustomLog /var/www/zena/<%= host %>/log/apache2.access.log combined
8
+ ErrorLog <%= config[:sites_root] %>/<%= config[:host] %>/log/apache2.error.log
9
+ CustomLog <%= config[:sites_root] %>/<%= config[:host] %>/log/apache2.access.log combined
10
10
 
11
11
  <location />
12
- SetEnv AWSTATS_FORCE_CONFIG <%= host %>
12
+ SetEnv AWSTATS_FORCE_CONFIG <%= config[:host] %>
13
13
 
14
14
  AuthType Basic
15
- AuthName "<%= host %> stats"
16
- AuthUserFile /var/www/zena/<%= host %>/log/.awstatspw
15
+ AuthName "<%= config[:host] %> stats"
16
+ AuthUserFile <%= config[:sites_root] %>/<%= config[:host] %>/log/.awstatspw
17
17
  Require valid-user
18
18
  </location>
19
19
 
@@ -15,8 +15,12 @@ rakefile("zena_tasks.rake") do
15
15
  <<-TASK
16
16
  # sync zena tasks to gem version
17
17
  env = File.read(File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment.rb'))
18
- if env =~ /config.gem.*zena.*version.*'(.*?)'/
19
- gem 'zena', "= \#{$1}"
18
+ if env =~ /^\\s*(#|).*config.gem.*zena.*version.*'(.*?)'/
19
+ if $1 == '#'
20
+ # commented out
21
+ else
22
+ gem 'zena', "= \#{$2}"
23
+ end
20
24
  end
21
25
  require 'zena'
22
26
  require 'tasks/zena'
@@ -63,10 +63,10 @@
63
63
  RewriteRule ^([^.]+)$ $1.html [QSA]
64
64
 
65
65
  # Redirect all non-static requests to cluster
66
- RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}%{QUERY_STRING} !-f
66
+ RewriteCond %{REQUEST_FILENAME} !-f
67
67
  RewriteRule ^/(.*)$ balancer://<%= config[:balancer] %>%{REQUEST_URI} [P,QSA,L]
68
68
  <% elsif config[:app_type] == :passenger %>
69
- PassengerAppRoot <% config[:app_root] %>
69
+ PassengerAppRoot <%= config[:app_root] %>
70
70
 
71
71
  <Location />
72
72
  # enable tracking uploads in /
@@ -1,10 +1,10 @@
1
- # zena apache2 vhost for <%= host %>
1
+ # zena apache2 vhost for <%= config[:host] %>
2
2
  # automatically generated file
3
3
 
4
4
  <VirtualHost *>
5
- ServerName www.<%= host %>
5
+ ServerName www.<%= config[:host] %>
6
6
 
7
7
  RewriteEngine On
8
- RewriteCond %{HTTP_HOST} ^www\.<%= host %>$ [NC]
9
- RewriteRule ^(.*)$ http://<%= host %>$1 [R=301,L]
8
+ RewriteCond %{HTTP_HOST} ^www\.<%= config[:host] %>$ [NC]
9
+ RewriteRule ^(.*)$ http://<%= config[:host] %>$1 [R=301,L]
10
10
  </VirtualHost>
@@ -130,11 +130,13 @@ module Zena
130
130
  @elements = {}
131
131
  @options = opts
132
132
  end
133
+
134
+ def sites
135
+ @sites ||= Dir["#{Zena::ROOT}/test/sites/*", "#{RAILS_ROOT}/bricks/**/sites/*"].map {|s| File.directory?(s) ? File.basename(s) : nil}.compact.uniq
136
+ end
133
137
 
134
138
  def run
135
-
136
- Dir.foreach("#{Zena::ROOT}/test/sites") do |site|
137
- next if site =~ /^\./
139
+ sites.each do |site|
138
140
  @site = site
139
141
  parse_fixtures
140
142
  after_parse
@@ -784,8 +786,7 @@ module Zena
784
786
  end
785
787
 
786
788
  def run
787
- Dir.foreach("#{Zena::ROOT}/test/sites") do |site|
788
- next if site =~ /^\./ || !File.directory?(File.join("#{Zena::ROOT}/test/sites",site))
789
+ sites.each do |site|
789
790
  out ""
790
791
  out "#{site}:"
791
792
  out_pair('site_id', Zena::FoxyParser::multi_site_id(site))
data/lib/zena/info.rb CHANGED
@@ -9,7 +9,7 @@ ZENA_CALENDAR_LANGS = ["en", "fr", "de"] # FIXME: build this dynamically from ex
9
9
  ENABLE_XSENDFILE = false
10
10
 
11
11
  module Zena
12
- VERSION = '0.16.8'
12
+ VERSION = '0.16.9'
13
13
  REVISION = 1336
14
14
  ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
15
15
  end
data/zena.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{zena}
8
- s.version = "0.16.8"
8
+ s.version = "0.16.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gaspard Bucher"]
12
- s.date = %q{2010-08-30}
12
+ s.date = %q{2010-09-21}
13
13
  s.default_executable = %q{zena}
14
14
  s.description = %q{zena is a Ruby on Rails CMS (content managment system) with a focus on usability, ease of customization and web 2.0 goodness (application like behaviour).}
15
15
  s.email = %q{gaspard@teti.ch}
@@ -2020,7 +2020,7 @@ Gem::Specification.new do |s|
2020
2020
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
2021
2021
  s.add_runtime_dependency(%q<ruby-recaptcha>, ["= 1.0.0"])
2022
2022
  s.add_runtime_dependency(%q<tzinfo>, [">= 0.3.12"])
2023
- s.add_runtime_dependency(%q<rubyless>, [">= 0.3.5"])
2023
+ s.add_runtime_dependency(%q<rubyless>, ["= 0.3.5"])
2024
2024
  s.add_runtime_dependency(%q<rails>, ["= 2.3.4"])
2025
2025
  s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
2026
2026
  s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
@@ -2039,7 +2039,7 @@ Gem::Specification.new do |s|
2039
2039
  else
2040
2040
  s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.0"])
2041
2041
  s.add_dependency(%q<tzinfo>, [">= 0.3.12"])
2042
- s.add_dependency(%q<rubyless>, [">= 0.3.5"])
2042
+ s.add_dependency(%q<rubyless>, ["= 0.3.5"])
2043
2043
  s.add_dependency(%q<rails>, ["= 2.3.4"])
2044
2044
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2045
2045
  s.add_dependency(%q<authlogic>, ["= 2.1.3"])
@@ -2059,7 +2059,7 @@ Gem::Specification.new do |s|
2059
2059
  else
2060
2060
  s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.0"])
2061
2061
  s.add_dependency(%q<tzinfo>, [">= 0.3.12"])
2062
- s.add_dependency(%q<rubyless>, [">= 0.3.5"])
2062
+ s.add_dependency(%q<rubyless>, ["= 0.3.5"])
2063
2063
  s.add_dependency(%q<rails>, ["= 2.3.4"])
2064
2064
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2065
2065
  s.add_dependency(%q<authlogic>, ["= 2.1.3"])
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 16
8
- - 8
9
- version: 0.16.8
8
+ - 9
9
+ version: 0.16.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gaspard Bucher
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-30 00:00:00 +02:00
17
+ date: 2010-09-21 00:00:00 +02:00
18
18
  default_executable: zena
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -50,7 +50,7 @@ dependencies:
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "="
54
54
  - !ruby/object:Gem::Version
55
55
  segments:
56
56
  - 0