zena 0.16.0 → 0.16.1
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.
- data/History.txt +7 -0
- data/app/models/site.rb +0 -1
- data/bricks/sphinx/lib/use_sphinx.rb +1 -1
- data/bricks/sphinx/misc/deploy.rb +39 -11
- data/bricks/sphinx/misc/sphinx.yml +2 -1
- data/bricks/sphinx/misc/tasks.rb +129 -12
- data/bricks/{delayed_job → worker}/README +0 -0
- data/bricks/{delayed_job → worker}/migrate/20091104191643_create_delayed_jobs_table.rb +0 -0
- data/bricks/worker/misc/deploy.rb +22 -0
- data/bricks/{delayed_job → worker}/misc/init.rb +0 -0
- data/bricks/worker/misc/tasks.rb +68 -0
- data/bricks/worker/misc/worker +40 -0
- data/config/bricks.yml +3 -3
- data/config/deploy.rb +11 -2
- data/config/gems.yml +2 -3
- data/config/sphinx.yml +1 -0
- data/db/migrate/20091026161708_add_persistence_token.rb +5 -1
- data/db/migrate/20091124161608_rebuild_fullpath.rb +6 -0
- data/db/migrate/20100115134729_rebuild_fullpath_after_fix.rb +11 -0
- data/db/schema.rb +1 -1
- data/lib/tasks/zena.rake +47 -11
- data/lib/zena/deploy.rb +123 -39
- data/lib/zena/info.rb +1 -1
- data/test/unit/site_test.rb +19 -4
- data/test/unit/user_test.rb +22 -0
- data/zena.gemspec +16 -16
- metadata +12 -12
- data/bricks/delayed_job/misc/tasks.rb +0 -2
- data/script/process/inspector +0 -3
- data/script/process/reaper +0 -3
- data/script/process/spawner +0 -3
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.16.1 2010-01-16
|
2
|
+
|
3
|
+
* 3 minor enhancements
|
4
|
+
* rewrite of rake and capistrano tasks for sphinx brick
|
5
|
+
* rewrite of rake and capistrano tasks for worker brick
|
6
|
+
* fixed asset copying (should not overwrite without asking)
|
7
|
+
|
1
8
|
== 0.16.0 2010-01-15
|
2
9
|
|
3
10
|
* 3 major enhancements:
|
data/app/models/site.rb
CHANGED
@@ -315,7 +315,6 @@ class Site < ActiveRecord::Base
|
|
315
315
|
Site.connection.execute "DELETE FROM caches WHERE site_id = #{self[:id]}"
|
316
316
|
Site.connection.execute "DELETE FROM cached_pages_nodes WHERE cached_pages_nodes.node_id IN (SELECT nodes.id FROM nodes WHERE nodes.site_id = #{self[:id]})"
|
317
317
|
Site.connection.execute "DELETE FROM cached_pages WHERE site_id = #{self[:id]}"
|
318
|
-
Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE site_id = #{self[:id]}"
|
319
318
|
end
|
320
319
|
|
321
320
|
if clear_zafu
|
@@ -1,20 +1,48 @@
|
|
1
1
|
require 'thinking_sphinx/deploy/capistrano'
|
2
2
|
|
3
3
|
Capistrano::Configuration.instance(:must_exist).load do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
task :before_update_code, :roles => [:app] do
|
8
|
-
thinking_sphinx.stop
|
4
|
+
task :sphinx_stop, :roles => [:app] do
|
5
|
+
# stop sphinx search daemon
|
6
|
+
run "#{in_current} rake RAILS_ENV=production sphinx:stop"
|
9
7
|
end
|
10
8
|
|
11
|
-
task :
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
task :sphinx_start, :roles => [:app] do
|
10
|
+
# make sure sphinx can access the indexes
|
11
|
+
sphinx_symlink_indexes
|
12
|
+
# make sure a cron indexer is in place
|
13
|
+
sphinx_setup_indexer
|
14
|
+
# start search daemon
|
15
|
+
run "#{in_current} rake RAILS_ENV=production sphinx:start"
|
15
16
|
end
|
16
17
|
|
17
|
-
task :
|
18
|
+
task :sphinx_symlink_indexes, :roles => [:app] do
|
19
|
+
run "test -e #{shared_path}/db || mkdir #{shared_path}/db"
|
20
|
+
run "test -e #{shared_path}/db/sphinx || mkdir #{shared_path}/db/sphinx"
|
18
21
|
run "ln -nfs #{shared_path}/db/sphinx #{current_path}/db/sphinx"
|
19
22
|
end
|
20
|
-
|
23
|
+
|
24
|
+
task :sphinx_setup, :roles => [:app] do
|
25
|
+
# setup sphinx
|
26
|
+
run "#{in_current} rake RAILS_ENV=production sphinx:setup"
|
27
|
+
end
|
28
|
+
|
29
|
+
task :sphinx_index, :roles => [:app] do
|
30
|
+
# rebuild sphinx index now
|
31
|
+
run "#{in_current} rake RAILS_ENV=production sphinx:index"
|
32
|
+
end
|
33
|
+
|
34
|
+
task :sphinx_setup_indexer, :roles => [:app] do
|
35
|
+
# install cron job to rebuild indexes
|
36
|
+
run "#{in_current} rake RAILS_ENV=production sphinx:setup_indexer"
|
37
|
+
end
|
38
|
+
|
39
|
+
# Hook start/stop methods into app start/stop/restart
|
40
|
+
|
41
|
+
on_stop do
|
42
|
+
sphinx_stop
|
43
|
+
end
|
44
|
+
|
45
|
+
on_start do
|
46
|
+
sphinx_start
|
47
|
+
end
|
48
|
+
end
|
data/bricks/sphinx/misc/tasks.rb
CHANGED
@@ -1,21 +1,138 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
require 'thinking_sphinx/deltas/delayed_delta/tasks'
|
6
|
-
require 'thinking_sphinx/deltas/delayed_delta' # we need this line for the ts:dd job runner
|
7
|
-
rescue LoadError
|
8
|
-
# no delayed_delta
|
9
|
-
end
|
1
|
+
# The ThinkingSphinx::Configuration needs RAILS_ROOT and RAILS_ENV in order to function. Only 'setup' needs the
|
2
|
+
# environment since it needs to get configuration settings from the classes in zena.
|
3
|
+
require 'tempfile'
|
4
|
+
require 'yaml'
|
10
5
|
|
11
6
|
namespace :sphinx do
|
7
|
+
setup_done = File.exist?("#{RAILS_ROOT}/config/#{RAILS_ENV}.sphinx.conf")
|
8
|
+
|
9
|
+
desc "Create a default configuration file and generate sphinx query"
|
10
|
+
task :setup => :environment do
|
11
|
+
# TODO: find another way to make sure the models are loaded:
|
12
|
+
[Node, Version]
|
12
13
|
|
13
|
-
desc "Create a default configuration file"
|
14
|
-
task :config do
|
15
14
|
if File.exist?("#{RAILS_ROOT}/config/sphinx.yml")
|
16
|
-
puts "
|
15
|
+
puts "Sphinx searchd: config/sphinx.yml exists, not copying"
|
17
16
|
else
|
18
17
|
FileUtils.cp(File.join(File.dirname(__FILE__), 'sphinx.yml'), "#{RAILS_ROOT}/config/sphinx.yml")
|
18
|
+
puts "Sphinx searchd: created initial config/sphinx.yml"
|
19
|
+
end
|
20
|
+
|
21
|
+
sphinx_conf = ThinkingSphinx::Configuration.instance
|
22
|
+
|
23
|
+
# We need this mess because mkdir_p does not properly resolve symlinks
|
24
|
+
db_path = sphinx_conf.searchd_file_path
|
25
|
+
base = File.dirname(db_path)
|
26
|
+
sym_base = `readlink #{base.inspect}`
|
27
|
+
if sym_base != '' && $? == 0
|
28
|
+
base = sym_base.chomp
|
29
|
+
end
|
30
|
+
|
31
|
+
db_path = File.join(base, File.basename(db_path))
|
32
|
+
|
33
|
+
FileUtils.mkdir_p db_path
|
34
|
+
|
35
|
+
sphinx_conf.build
|
36
|
+
puts "Sphinx searchd: created Sphinx configuration (#{sphinx_conf.config_file})"
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Create a crontab entry to run the indexer every 30 minutes"
|
40
|
+
task :setup_indexer do
|
41
|
+
Rake::Task['sphinx:setup'].invoke if !setup_done
|
42
|
+
|
43
|
+
config = YAML.load_file(File.join(RAILS_ROOT, 'config', 'sphinx.yml'))[RAILS_ENV]
|
44
|
+
every = config['run_indexer_at'] || '10,40'
|
45
|
+
res = `crontab -l 2>&1`
|
46
|
+
if $? != 0 || res =~ /crontab/
|
47
|
+
puts "Sphinx indexer: could not access crontab (#{res.chomp})"
|
48
|
+
else
|
49
|
+
crontab = res.chomp.split("\n")
|
50
|
+
res = []
|
51
|
+
job = "#{every} * * * * /usr/bin/rake RAILS_ENV=production sphinx:index >> /root/cron.log 2>&1"
|
52
|
+
job_inserted = false
|
53
|
+
job_action = 'install'
|
54
|
+
crontab.each do |line|
|
55
|
+
if line =~ /sphinx:index/
|
56
|
+
if !job_inserted
|
57
|
+
# update
|
58
|
+
res << job
|
59
|
+
job_inserted = true
|
60
|
+
job_action = 'update'
|
61
|
+
end
|
62
|
+
else
|
63
|
+
res << line
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if !job_inserted
|
68
|
+
# new entry in crontab
|
69
|
+
res << job
|
70
|
+
end
|
71
|
+
|
72
|
+
tmpf = Tempfile.new('crontab')
|
73
|
+
File.open(tmpf.path, 'wb') do |file|
|
74
|
+
file.puts res.join("\n")
|
75
|
+
end
|
76
|
+
user = `whoami`
|
77
|
+
res = `crontab -u #{user.chomp} #{tmpf.path}`
|
78
|
+
if $? == 0
|
79
|
+
puts "Sphinx indexer: cron job #{job_action} ok"
|
80
|
+
else
|
81
|
+
puts "Sphinx indexer: could not #{job_action} cron job\n#{res}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings"
|
87
|
+
task :start do
|
88
|
+
sphinx_conf = ThinkingSphinx::Configuration.instance
|
89
|
+
|
90
|
+
Rake::Task['sphinx:setup'].invoke if !setup_done
|
91
|
+
|
92
|
+
if ThinkingSphinx.sphinx_running?
|
93
|
+
puts "Sphinx searchd: already started (pid #{ThinkingSphinx.sphinx_pid})"
|
94
|
+
else
|
95
|
+
Dir["#{sphinx_conf.searchd_file_path}/*.spl"].each { |file| File.delete(file) }
|
96
|
+
|
97
|
+
sphinx_conf.controller.start
|
98
|
+
|
99
|
+
if ThinkingSphinx.sphinx_running?
|
100
|
+
puts "Sphinx searchd: started successfully (pid #{ThinkingSphinx.sphinx_pid})."
|
101
|
+
else
|
102
|
+
tail = `tail -n 10 #{sphinx_conf.searchd_log_file.inspect}`
|
103
|
+
puts "Sphinx searchd: failed to start.\n#{tail}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
desc "Stop Sphinx searchd"
|
109
|
+
task :stop do
|
110
|
+
unless ThinkingSphinx.sphinx_running?
|
111
|
+
puts "Sphinx searchd: already stopped."
|
112
|
+
else
|
113
|
+
ThinkingSphinx::Configuration.instance.controller.stop
|
114
|
+
puts "Sphinx searchd: stopped (pid #{ThinkingSphinx.sphinx_pid})."
|
19
115
|
end
|
20
116
|
end
|
117
|
+
|
118
|
+
desc "Restart Sphinx searchd"
|
119
|
+
task :restart do
|
120
|
+
Rake::Task['sphinx:stop'].invoke
|
121
|
+
sleep(1)
|
122
|
+
Rake::Task['sphinx:start'].invoke
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "Index data for Sphinx using Thinking Sphinx's settings"
|
126
|
+
task :index do
|
127
|
+
|
128
|
+
Rake::Task['sphinx:setup'].invoke if !setup_done
|
129
|
+
|
130
|
+
res = ThinkingSphinx::Configuration.instance.controller.index
|
131
|
+
if $? == 0
|
132
|
+
puts "Sphinx searchd: successfully indexed data"
|
133
|
+
else
|
134
|
+
puts "Sphinx searchd: indexing failed\n#{res}"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
21
138
|
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'thinking_sphinx/deploy/capistrano'
|
2
|
+
|
3
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
4
|
+
|
5
|
+
task :worker_stop, :roles => [:app] do
|
6
|
+
# stop delayed job worker
|
7
|
+
run "#{in_current} rake RAILS_ENV=production worker:stop"
|
8
|
+
end
|
9
|
+
|
10
|
+
on_stop do
|
11
|
+
worker_stop
|
12
|
+
end
|
13
|
+
|
14
|
+
task :worker_start, :roles => [:app] do
|
15
|
+
# start delayed job worker
|
16
|
+
run "#{in_current} rake RAILS_ENV=production worker:start"
|
17
|
+
end
|
18
|
+
|
19
|
+
on_start do
|
20
|
+
worker_start
|
21
|
+
end
|
22
|
+
end
|
File without changes
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
class WorkerCmd
|
3
|
+
OK_MESSAGE = {'start' => 'started', 'stop' => 'stopped'}
|
4
|
+
def initialize(name, script)
|
5
|
+
@name = name
|
6
|
+
@script = script
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(cmd)
|
10
|
+
res = `cd #{RAILS_ROOT} && #{@script} RAILS_ENV=#{RAILS_ENV} #{cmd}`
|
11
|
+
if $? == 0
|
12
|
+
puts "#{@name}: #{OK_MESSAGE[cmd]} (pid #{pid})"
|
13
|
+
else
|
14
|
+
puts "#{@name}: failed to #{cmd}\n#{res}"
|
15
|
+
end
|
16
|
+
@pid = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def start
|
20
|
+
if running?
|
21
|
+
puts "#{@name}: already started (pid #{pid})"
|
22
|
+
else
|
23
|
+
execute('start')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def stop
|
28
|
+
if !running?
|
29
|
+
puts "#{@name}: already stopped"
|
30
|
+
else
|
31
|
+
execute('stop')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def pid_file
|
36
|
+
@pid_file ||= File.expand_path(File.join(RAILS_ROOT, 'log', "#{@name}.pid"))
|
37
|
+
end
|
38
|
+
|
39
|
+
def pid
|
40
|
+
@pid ||= File.exists?(pid_file) ? File.read(pid_file)[/\d+/] : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def running?
|
44
|
+
pid && Process.kill(0, pid.to_i) rescue false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
namespace :worker do
|
50
|
+
worker = WorkerCmd.new('worker', File.expand_path(File.join(File.dirname(__FILE__), 'worker')))
|
51
|
+
|
52
|
+
desc "Start the delayed jobs worker"
|
53
|
+
task :start do
|
54
|
+
worker.start
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Stop the delayed jobs worker"
|
58
|
+
task :stop do
|
59
|
+
worker.stop
|
60
|
+
end
|
61
|
+
|
62
|
+
desc "Restart the delayed jobs worker"
|
63
|
+
task :restart do
|
64
|
+
worker.stop
|
65
|
+
sleep(1)
|
66
|
+
worker.start
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'daemons'
|
4
|
+
|
5
|
+
env, cmd = 'development', nil
|
6
|
+
ARGV.each do |arg|
|
7
|
+
if arg =~ /RAILS_ENV\s*=\s*(\w+)/
|
8
|
+
env = $1
|
9
|
+
else
|
10
|
+
cmd = arg
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
unless %w{index start stop restart}.include?(cmd)
|
15
|
+
puts "Usage: script/sphinx RAILS_ENV=production [index|start|stop|restart]"
|
16
|
+
exit -1
|
17
|
+
end
|
18
|
+
|
19
|
+
dir = File.expand_path('.')
|
20
|
+
|
21
|
+
daemon_options = {
|
22
|
+
:multiple => false,
|
23
|
+
:dir_mode => :normal,
|
24
|
+
:dir => File.join(dir, 'log'),
|
25
|
+
:backtrace => true
|
26
|
+
}
|
27
|
+
|
28
|
+
ARGV.clear
|
29
|
+
ARGV << cmd
|
30
|
+
|
31
|
+
Daemons.run_proc('worker', daemon_options) do
|
32
|
+
ARGV.clear
|
33
|
+
|
34
|
+
Dir.chdir dir
|
35
|
+
ENV['RAILS_ENV'] = RAILS_ENV = env
|
36
|
+
require File.join('config', 'environment')
|
37
|
+
require 'delayed_job'
|
38
|
+
|
39
|
+
Delayed::Worker.new.start
|
40
|
+
end
|
data/config/bricks.yml
CHANGED
@@ -2,7 +2,7 @@ test:
|
|
2
2
|
tags: ON
|
3
3
|
captcha: ON
|
4
4
|
sphinx: OFF
|
5
|
-
|
5
|
+
worker: OFF
|
6
6
|
|
7
7
|
development:
|
8
8
|
tags: ON
|
@@ -14,7 +14,7 @@ development:
|
|
14
14
|
adapter: 'mysql,postgresql'
|
15
15
|
run_if:
|
16
16
|
file: 'log/searchd.development.pid'
|
17
|
-
|
17
|
+
worker:
|
18
18
|
switch: OFF
|
19
19
|
activate_if:
|
20
20
|
gem: 'delayed_job'
|
@@ -29,7 +29,7 @@ production:
|
|
29
29
|
adapter: 'mysql,postgresql'
|
30
30
|
run_if:
|
31
31
|
file: 'log/searchd.production.pid'
|
32
|
-
|
32
|
+
worker:
|
33
33
|
switch: ON
|
34
34
|
activate_if:
|
35
35
|
gem: 'delayed_job'
|
data/config/deploy.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
set :db_name, "zena" # If you change this: no dots in this name !
|
2
|
-
set :server_ip,
|
2
|
+
set :server_ip, nil # FIXME: set this to your remote server IP in the form: "215.0.0.1"
|
3
3
|
set :mongrel_port, "8000"
|
4
4
|
set :mongrel_count, "3"
|
5
5
|
set :db_password, nil # FIXME: set password (can be anything).
|
@@ -32,7 +32,16 @@ if self[:server_ip]
|
|
32
32
|
if !defined?(::RAILS_ENV)
|
33
33
|
::RAILS_ENV = 'production'
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
|
+
# This file is copied into zena applications.
|
37
|
+
deploy_path = "#{RAILS_ROOT}/lib/zena/deploy"
|
38
|
+
if File.exist?("#{deploy_path}.rb")
|
39
|
+
# We are running directly inside zena
|
40
|
+
require deploy_path
|
41
|
+
else
|
42
|
+
# Zena app, using zena as gem
|
43
|
+
require 'zena/deploy'
|
44
|
+
end
|
36
45
|
|
37
46
|
else
|
38
47
|
puts <<-TXT
|
data/config/gems.yml
CHANGED
@@ -23,13 +23,13 @@ thinking-sphinx:
|
|
23
23
|
optional: yes
|
24
24
|
source: 'http://gemcutter.org'
|
25
25
|
lib: 'thinking_sphinx'
|
26
|
-
version: '>= 1.3.
|
26
|
+
version: '>= 1.3.14'
|
27
27
|
|
28
28
|
ts-delayed-delta:
|
29
29
|
optional: yes
|
30
30
|
source: 'http://gemcutter.org'
|
31
31
|
lib: 'thinking_sphinx/deltas/delayed_delta'
|
32
|
-
version: '>= 1.0.
|
32
|
+
version: '>= 1.0.2'
|
33
33
|
|
34
34
|
delayed_job:
|
35
35
|
optional: yes
|
@@ -61,4 +61,3 @@ thoughtbot-shoulda:
|
|
61
61
|
|
62
62
|
jeweler:
|
63
63
|
version: '>= 1.4.0'
|
64
|
-
development_only: true
|
data/config/sphinx.yml
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
class AddPersistenceToken < ActiveRecord::Migration
|
2
|
+
User.reset_column_information
|
2
3
|
def self.up
|
3
4
|
add_column :users, :persistence_token, :string
|
4
|
-
|
5
|
+
unless User.column_names.include?('password_salt')
|
6
|
+
# Strangely some legacy apps already have the password_salt. Better be safe.
|
7
|
+
add_column :users, :password_salt, :string
|
8
|
+
end
|
5
9
|
rename_column :users, :password, :crypted_password
|
6
10
|
end
|
7
11
|
|
@@ -1,5 +1,11 @@
|
|
1
1
|
class RebuildFullpath < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
+
|
4
|
+
# Reset column information (used when running all migrations at once)
|
5
|
+
[User, Node, Version, Site, Group].each do |klass|
|
6
|
+
klass.reset_column_information
|
7
|
+
end
|
8
|
+
|
3
9
|
Site.all.each do |site|
|
4
10
|
puts "===== rebuilding fullpath for #{site.host} (#{Node.count(:conditions => "site_id = #{site.id}")} nodes)"
|
5
11
|
site.rebuild_fullpath
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class RebuildFullpathAfterFix < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
Site.all.each do |site|
|
4
|
+
puts "===== rebuilding fullpath for #{site.host} (#{Node.count(:conditions => "site_id = #{site.id}")} nodes)"
|
5
|
+
site.rebuild_fullpath
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.down
|
10
|
+
end
|
11
|
+
end
|
data/db/schema.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# It's strongly recommended to check this file into your version control system.
|
11
11
|
|
12
|
-
ActiveRecord::Schema.define(:version =>
|
12
|
+
ActiveRecord::Schema.define(:version => 20100115134729) do
|
13
13
|
|
14
14
|
create_table "cached_pages", :force => true do |t|
|
15
15
|
t.text "path"
|
data/lib/tasks/zena.rake
CHANGED
@@ -59,6 +59,8 @@ def copy_assets(from, to)
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
+
COPY_FILE_OVERWRITE_ALL = {}
|
63
|
+
|
62
64
|
def copy_files(from, to)
|
63
65
|
base = File.dirname(to)
|
64
66
|
unless File.exist?(base)
|
@@ -69,6 +71,32 @@ def copy_files(from, to)
|
|
69
71
|
next if f =~ /\A./
|
70
72
|
copy_files("#{from}/#{f}", "#{to}/#{f}")
|
71
73
|
end
|
74
|
+
elsif File.exist?(to)
|
75
|
+
if COPY_FILE_OVERWRITE_ALL.has_key?(base)
|
76
|
+
if COPY_FILE_OVERWRITE_ALL[base]
|
77
|
+
FileUtils.cp(from, base)
|
78
|
+
else
|
79
|
+
# skip
|
80
|
+
end
|
81
|
+
elsif File.read(from) != File.read(to)
|
82
|
+
# ask
|
83
|
+
puts "\n## exists: #{to}\n (a= overwrite all in same destination, s= overwrite none in same destination)"
|
84
|
+
print " overwrite (ayNs) ? "
|
85
|
+
answer = STDIN.gets.chomp.downcase
|
86
|
+
case answer
|
87
|
+
when 'y'
|
88
|
+
FileUtils.cp(from, base)
|
89
|
+
when 'a'
|
90
|
+
COPY_FILE_OVERWRITE_ALL[base] = true
|
91
|
+
puts "overwrite all in #{base}"
|
92
|
+
FileUtils.cp(from, base)
|
93
|
+
when 's'
|
94
|
+
COPY_FILE_OVERWRITE_ALL[base] = false
|
95
|
+
puts "overwrite none in #{base}"
|
96
|
+
else
|
97
|
+
puts "skip #{to}"
|
98
|
+
end
|
99
|
+
end
|
72
100
|
else
|
73
101
|
FileUtils.cp(from, base)
|
74
102
|
end
|
@@ -395,20 +423,28 @@ namespace :zena do
|
|
395
423
|
end
|
396
424
|
end
|
397
425
|
|
398
|
-
desc "Create the database, migrate, create 'localhost' site and start application"
|
426
|
+
desc "Create the database, migrate, create 'localhost' site and start application (in production environment by default)"
|
399
427
|
task :init do
|
400
428
|
# FIXME: how to run sub-task
|
401
|
-
[
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
429
|
+
ENV['RAILS_ENV'] = RAILS_ENV || 'production'
|
430
|
+
ENV['HOST'] ||= 'localhost'
|
431
|
+
ENV['LANG'] ||= 'en'
|
432
|
+
ENV['PASSWORD'] ||= 'admin'
|
433
|
+
|
434
|
+
Rake::Task["db:create"].invoke
|
435
|
+
Rake::Task["zena:migrate"].invoke
|
436
|
+
|
437
|
+
# We cannot use 'invoke' here because the User class needs to be reloaded
|
438
|
+
env = %w{RAILS_ENV HOST LANG PASSWORD}.map{|e| "#{e}=#{ENV[e]}"}.join(' ')
|
439
|
+
cmd = "rake zena:mksite #{env}"
|
440
|
+
puts cmd
|
441
|
+
system(cmd)
|
442
|
+
|
443
|
+
system("#{Gem.win_platform? ? 'start' : 'open'} #{File.join(Zena::ROOT, 'lib/zena/deploy/start.html')}")
|
444
|
+
|
445
|
+
cmd = "script/server -e #{ENV['RAILS_ENV']} -p 3211"
|
410
446
|
puts cmd
|
411
447
|
exec cmd
|
412
448
|
end
|
413
449
|
|
414
|
-
end
|
450
|
+
end
|
data/lib/zena/deploy.rb
CHANGED
@@ -27,13 +27,18 @@ require File.join(File.dirname(__FILE__), 'info')
|
|
27
27
|
require File.join(File.dirname(__FILE__), '..', 'bricks')
|
28
28
|
|
29
29
|
Capistrano::Configuration.instance(:must_exist).load do
|
30
|
+
|
30
31
|
set :templates, File.join(File.dirname(__FILE__), 'deploy')
|
31
32
|
self[:app_type] ||= :mongrel
|
32
33
|
self[:app_root] ||= '/var/zena/current'
|
33
34
|
self[:sites_root] ||= '/var/www/zena'
|
34
35
|
self[:balancer] ||= db_name
|
36
|
+
self[:runner] ||= 'root'
|
37
|
+
self[:on_stop] = []
|
38
|
+
self[:on_start] = []
|
35
39
|
|
36
40
|
set :in_current, "cd #{deploy_to}/current &&"
|
41
|
+
|
37
42
|
class RenderClass
|
38
43
|
def initialize(path)
|
39
44
|
@text = File.read(path)
|
@@ -54,6 +59,14 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
54
59
|
RenderClass.new(file).render(hash)
|
55
60
|
end
|
56
61
|
|
62
|
+
def on_stop(&block)
|
63
|
+
self[:on_stop] << block
|
64
|
+
end
|
65
|
+
|
66
|
+
def on_start(&block)
|
67
|
+
self[:on_start] << block
|
68
|
+
end
|
69
|
+
|
57
70
|
#========================== SOURCE CODE =========================#
|
58
71
|
|
59
72
|
|
@@ -69,12 +82,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
69
82
|
|
70
83
|
desc "clear all zafu compiled templates"
|
71
84
|
task :clear_zafu, :roles => :app do
|
72
|
-
run "#{in_current} rake zena:clear_zafu
|
85
|
+
run "#{in_current} rake RAILS_ENV=production zena:clear_zafu"
|
73
86
|
end
|
74
87
|
|
75
88
|
desc "clear all cache compiled templates"
|
76
89
|
task :clear_cache, :roles => :app do
|
77
|
-
run "#{in_current} rake zena:clear_cache
|
90
|
+
run "#{in_current} rake RAILS_ENV=production zena:clear_cache"
|
78
91
|
end
|
79
92
|
|
80
93
|
desc "after code update"
|
@@ -96,7 +109,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
96
109
|
|
97
110
|
desc "migrate database (zena version)"
|
98
111
|
task :migrate, :roles => :db do
|
99
|
-
run "#{in_current} rake zena:migrate
|
112
|
+
run "#{in_current} rake RAILS_ENV=production zena:migrate"
|
100
113
|
end
|
101
114
|
|
102
115
|
desc "initial app setup"
|
@@ -133,46 +146,19 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
133
146
|
restart
|
134
147
|
end
|
135
148
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
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"
|
140
|
-
run "#{in_current} echo 'config_script: config/mongrel_upload_progress.conf' >> config/mongrel_cluster.yml"
|
141
|
-
end
|
142
|
-
|
143
|
-
desc "Stop the drb upload_progress server"
|
144
|
-
task :stop_upload_progress , :roles => :app do
|
145
|
-
run "#{in_current} ruby lib/upload_progress_server.rb stop"
|
146
|
-
end
|
147
|
-
|
148
|
-
desc "Start the drb upload_progress server"
|
149
|
-
task :start_upload_progress , :roles => :app do
|
150
|
-
run "#{in_current} lib/upload_progress_server.rb start"
|
151
|
-
end
|
152
|
-
|
153
|
-
desc "Restart the upload_progress server"
|
154
|
-
task :restart_upload_progress, :roles => :app do
|
155
|
-
stop_upload_progress
|
156
|
-
start_upload_progress
|
149
|
+
desc "Restart application"
|
150
|
+
task :restart, :roles => :app do
|
151
|
+
deploy.restart
|
157
152
|
end
|
158
153
|
|
159
|
-
desc "Start
|
154
|
+
desc "Start application"
|
160
155
|
task :start, :roles => :app do
|
161
|
-
|
162
|
-
run "#{in_current} mongrel_rails cluster::start"
|
156
|
+
deploy.start
|
163
157
|
end
|
164
158
|
|
165
|
-
desc "Stop
|
159
|
+
desc "Stop application"
|
166
160
|
task :stop, :roles => :app do
|
167
|
-
|
168
|
-
run "#{in_current} mongrel_rails cluster::stop"
|
169
|
-
end
|
170
|
-
|
171
|
-
desc "Restart mongrel"
|
172
|
-
task :restart, :roles => :app do
|
173
|
-
stop
|
174
|
-
restart_upload_progress
|
175
|
-
start
|
161
|
+
deploy.stop
|
176
162
|
end
|
177
163
|
|
178
164
|
#========================== APACHE2 ===============================#
|
@@ -361,8 +347,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
361
347
|
|
362
348
|
deploy::update
|
363
349
|
|
364
|
-
mongrel_setup
|
365
|
-
|
366
350
|
apache2_setup
|
367
351
|
|
368
352
|
set_permissions
|
@@ -402,4 +386,104 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
402
386
|
end
|
403
387
|
|
404
388
|
Bricks.load_misc('deploy')
|
389
|
+
|
390
|
+
|
391
|
+
#========================== MONGREL ===============================#
|
392
|
+
namespace :mongrel do
|
393
|
+
|
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
|
399
|
+
|
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
|
404
|
+
|
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
|
409
|
+
|
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
|
415
|
+
|
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"
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
437
|
+
namespace :deploy do
|
438
|
+
|
439
|
+
desc "Restart application"
|
440
|
+
task :restart, :roles => :app do
|
441
|
+
|
442
|
+
self[:on_stop].each do |block|
|
443
|
+
block.call
|
444
|
+
end
|
445
|
+
|
446
|
+
self[:on_start].each do |block|
|
447
|
+
block.call
|
448
|
+
end
|
449
|
+
case self[:app_type]
|
450
|
+
when :mongrel
|
451
|
+
mongrel.restart
|
452
|
+
else
|
453
|
+
puts "'#{self[:app_type]}' not supported."
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
457
|
+
desc "Start application"
|
458
|
+
task :start, :roles => :app do
|
459
|
+
|
460
|
+
self[:on_start].each do |block|
|
461
|
+
block.call
|
462
|
+
end
|
463
|
+
|
464
|
+
case self[:app_type]
|
465
|
+
when :mongrel
|
466
|
+
mongrel.start
|
467
|
+
else
|
468
|
+
puts "'#{self[:app_type]}' not supported."
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
desc "Stop application"
|
473
|
+
task :stop, :roles => :app do
|
474
|
+
|
475
|
+
self[:on_stop].each do |block|
|
476
|
+
block.call
|
477
|
+
end
|
478
|
+
|
479
|
+
case self[:app_type]
|
480
|
+
when :mongrel
|
481
|
+
mongrel.stop
|
482
|
+
else
|
483
|
+
puts "'#{self[:app_type]}' not supported."
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
end
|
488
|
+
|
405
489
|
end
|
data/lib/zena/info.rb
CHANGED
@@ -9,7 +9,7 @@ ZENA_CALENDAR_LANGS = ["en", "fr"] # FIXME: build this dynamically from existing
|
|
9
9
|
ENABLE_XSENDFILE = false
|
10
10
|
|
11
11
|
module Zena
|
12
|
-
VERSION = '0.16.
|
12
|
+
VERSION = '0.16.1'
|
13
13
|
REVISION = 1336
|
14
14
|
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
15
15
|
end
|
data/test/unit/site_test.rb
CHANGED
@@ -227,7 +227,7 @@ class SiteTest < Zena::Unit::TestCase
|
|
227
227
|
assert_equal Hash['w'=>{'fr' => versions_id(:opening_red_fr), 'en' => versions_id(:opening_en)},
|
228
228
|
'r'=>{'fr' => versions_id(:opening_fr), 'en' => versions_id(:opening_en)}], opening.vhash
|
229
229
|
end
|
230
|
-
|
230
|
+
|
231
231
|
def test_rebuild_fullpath
|
232
232
|
login(:tiger)
|
233
233
|
Node.connection.execute "UPDATE nodes SET fullpath = NULL"
|
@@ -239,17 +239,32 @@ class SiteTest < Zena::Unit::TestCase
|
|
239
239
|
assert_equal 'projects/cleanWater/status', status.fullpath
|
240
240
|
assert_equal 'projects/cleanWater', status.basepath
|
241
241
|
assert_equal false, status.custom_base
|
242
|
-
|
242
|
+
|
243
243
|
assert_equal 'projects/cleanWater/opening', opening.fullpath
|
244
244
|
assert_equal 'projects/cleanWater', opening.basepath
|
245
245
|
assert_equal false, opening.custom_base
|
246
|
-
|
246
|
+
|
247
247
|
assert_equal 'projects/cleanWater', cleanWater.fullpath
|
248
248
|
assert_equal 'projects/cleanWater', cleanWater.basepath
|
249
249
|
assert_equal true, cleanWater.custom_base
|
250
|
-
|
250
|
+
|
251
251
|
assert_equal 'collections/art', art.fullpath
|
252
252
|
assert_equal '', art.basepath
|
253
253
|
assert_equal false, art.custom_base
|
254
254
|
end
|
255
|
+
|
256
|
+
context 'Clearing a site cache' do
|
257
|
+
setup do
|
258
|
+
login(:tiger)
|
259
|
+
@site = visitor.site
|
260
|
+
end
|
261
|
+
|
262
|
+
should 'not alter fullpath' do
|
263
|
+
node = secure!(Node) { nodes(:status) }
|
264
|
+
assert_equal 'projects/cleanWater/status', node.fullpath
|
265
|
+
@site.clear_cache
|
266
|
+
node = secure!(Node) { nodes(:status) }
|
267
|
+
assert_equal 'projects/cleanWater/status', node.fullpath
|
268
|
+
end
|
269
|
+
end
|
255
270
|
end
|
data/test/unit/user_test.rb
CHANGED
@@ -272,4 +272,26 @@ class UserTest < Zena::Unit::TestCase
|
|
272
272
|
login(:lion)
|
273
273
|
assert_equal ['hello'], visitor.to_publish.map {|r| r.node.name}
|
274
274
|
end
|
275
|
+
|
276
|
+
context 'Creating a new user' do
|
277
|
+
setup do
|
278
|
+
login(:lion)
|
279
|
+
end
|
280
|
+
|
281
|
+
context 'with new' do
|
282
|
+
should 'accept a password attribute' do
|
283
|
+
user = nil
|
284
|
+
assert_nothing_raised { user = User.new('name' => 'R2D2', 'password' => 'Artoo') }
|
285
|
+
assert_equal Zena::CryptoProvider::Initial.encrypt('Artoo'), user.crypted_password
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
context 'with new_no_defaults' do
|
290
|
+
should 'accept a password attribute' do
|
291
|
+
user = nil
|
292
|
+
assert_nothing_raised { user = User.new_no_defaults('name' => 'R2D2', 'password' => 'Artoo') }
|
293
|
+
assert_equal Zena::CryptoProvider::Initial.encrypt('Artoo'), user.crypted_password
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
275
297
|
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
|
+
s.version = "0.16.1"
|
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-01-
|
12
|
+
s.date = %q{2010-01-16}
|
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}
|
@@ -250,10 +250,6 @@ Gem::Specification.new do |s|
|
|
250
250
|
"bricks/captcha/patch/application_helper.rb",
|
251
251
|
"bricks/captcha/patch/site.rb",
|
252
252
|
"bricks/captcha/zafu/captcha.rb",
|
253
|
-
"bricks/delayed_job/README",
|
254
|
-
"bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb",
|
255
|
-
"bricks/delayed_job/misc/init.rb",
|
256
|
-
"bricks/delayed_job/misc/tasks.rb",
|
257
253
|
"bricks/math/patch/application_helper.rb",
|
258
254
|
"bricks/sphinx/MIT-LICENSE",
|
259
255
|
"bricks/sphinx/README",
|
@@ -270,6 +266,12 @@ Gem::Specification.new do |s|
|
|
270
266
|
"bricks/tags/test/unit/tags_test.rb",
|
271
267
|
"bricks/tags/test/zafu/tags.yml",
|
272
268
|
"bricks/toto.zip",
|
269
|
+
"bricks/worker/README",
|
270
|
+
"bricks/worker/migrate/20091104191643_create_delayed_jobs_table.rb",
|
271
|
+
"bricks/worker/misc/deploy.rb",
|
272
|
+
"bricks/worker/misc/init.rb",
|
273
|
+
"bricks/worker/misc/tasks.rb",
|
274
|
+
"bricks/worker/misc/worker",
|
273
275
|
"config/boot.rb",
|
274
276
|
"config/bricks.yml",
|
275
277
|
"config/database_example.yml",
|
@@ -367,6 +369,7 @@ Gem::Specification.new do |s|
|
|
367
369
|
"db/migrate/20091101184952_add_session_table.rb",
|
368
370
|
"db/migrate/20091123175137_add_single_access_token.rb",
|
369
371
|
"db/migrate/20091124161608_rebuild_fullpath.rb",
|
372
|
+
"db/migrate/20100115134729_rebuild_fullpath_after_fix.rb",
|
370
373
|
"db/schema.rb",
|
371
374
|
"doc/README_FOR_APP",
|
372
375
|
"doc/fixtures.graffle",
|
@@ -1605,9 +1608,6 @@ Gem::Specification.new do |s|
|
|
1605
1608
|
"script/performance/benchmarker",
|
1606
1609
|
"script/performance/profiler",
|
1607
1610
|
"script/plugin",
|
1608
|
-
"script/process/inspector",
|
1609
|
-
"script/process/reaper",
|
1610
|
-
"script/process/spawner",
|
1611
1611
|
"script/runner",
|
1612
1612
|
"script/server",
|
1613
1613
|
"script/set_revision",
|
@@ -2017,17 +2017,17 @@ Gem::Specification.new do |s|
|
|
2017
2017
|
s.add_runtime_dependency(%q<rails>, ["= 2.3.4"])
|
2018
2018
|
s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2019
2019
|
s.add_runtime_dependency(%q<authlogic>, [">= 0"])
|
2020
|
-
s.add_runtime_dependency(%q<ts-delayed-delta>, [">= 1.0.
|
2020
|
+
s.add_runtime_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2021
2021
|
s.add_runtime_dependency(%q<pvande-differ>, ["= 0.1.1"])
|
2022
2022
|
s.add_runtime_dependency(%q<mislav-will_paginate>, ["~> 2.2.3"])
|
2023
2023
|
s.add_runtime_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2024
2024
|
s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
|
2025
|
-
s.add_runtime_dependency(%q<thinking-sphinx>, [">= 1.3.
|
2025
|
+
s.add_runtime_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2026
2026
|
s.add_runtime_dependency(%q<yamltest>, ["= 0.5.3"])
|
2027
2027
|
s.add_runtime_dependency(%q<json>, [">= 1.1.9"])
|
2028
2028
|
s.add_runtime_dependency(%q<gettext>, ["= 1.93.0"])
|
2029
2029
|
s.add_runtime_dependency(%q<rmagick>, [">= 2.11.1"])
|
2030
|
-
s.
|
2030
|
+
s.add_runtime_dependency(%q<jeweler>, [">= 1.4.0"])
|
2031
2031
|
s.add_runtime_dependency(%q<grosser-fast_gettext>, ["~> 0.4.16"])
|
2032
2032
|
s.add_runtime_dependency(%q<thoughtbot-shoulda>, ["= 2.10.2"])
|
2033
2033
|
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
|
@@ -2040,12 +2040,12 @@ Gem::Specification.new do |s|
|
|
2040
2040
|
s.add_dependency(%q<rails>, ["= 2.3.4"])
|
2041
2041
|
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2042
2042
|
s.add_dependency(%q<authlogic>, [">= 0"])
|
2043
|
-
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.
|
2043
|
+
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2044
2044
|
s.add_dependency(%q<pvande-differ>, ["= 0.1.1"])
|
2045
2045
|
s.add_dependency(%q<mislav-will_paginate>, ["~> 2.2.3"])
|
2046
2046
|
s.add_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2047
2047
|
s.add_dependency(%q<syntax>, ["= 1.0.0"])
|
2048
|
-
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.
|
2048
|
+
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2049
2049
|
s.add_dependency(%q<yamltest>, ["= 0.5.3"])
|
2050
2050
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
2051
2051
|
s.add_dependency(%q<gettext>, ["= 1.93.0"])
|
@@ -2064,12 +2064,12 @@ Gem::Specification.new do |s|
|
|
2064
2064
|
s.add_dependency(%q<rails>, ["= 2.3.4"])
|
2065
2065
|
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2066
2066
|
s.add_dependency(%q<authlogic>, [">= 0"])
|
2067
|
-
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.
|
2067
|
+
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2068
2068
|
s.add_dependency(%q<pvande-differ>, ["= 0.1.1"])
|
2069
2069
|
s.add_dependency(%q<mislav-will_paginate>, ["~> 2.2.3"])
|
2070
2070
|
s.add_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2071
2071
|
s.add_dependency(%q<syntax>, ["= 1.0.0"])
|
2072
|
-
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.
|
2072
|
+
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2073
2073
|
s.add_dependency(%q<yamltest>, ["= 0.5.3"])
|
2074
2074
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
2075
2075
|
s.add_dependency(%q<gettext>, ["= 1.93.0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zena
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gaspard Bucher
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-16 00:00:00 +01:00
|
13
13
|
default_executable: zena
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 1.0.
|
83
|
+
version: 1.0.2
|
84
84
|
version:
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: pvande-differ
|
@@ -130,7 +130,7 @@ dependencies:
|
|
130
130
|
requirements:
|
131
131
|
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: 1.3.
|
133
|
+
version: 1.3.14
|
134
134
|
version:
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: yamltest
|
@@ -174,7 +174,7 @@ dependencies:
|
|
174
174
|
version:
|
175
175
|
- !ruby/object:Gem::Dependency
|
176
176
|
name: jeweler
|
177
|
-
type: :
|
177
|
+
type: :runtime
|
178
178
|
version_requirement:
|
179
179
|
version_requirements: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
@@ -473,10 +473,6 @@ files:
|
|
473
473
|
- bricks/captcha/patch/application_helper.rb
|
474
474
|
- bricks/captcha/patch/site.rb
|
475
475
|
- bricks/captcha/zafu/captcha.rb
|
476
|
-
- bricks/delayed_job/README
|
477
|
-
- bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb
|
478
|
-
- bricks/delayed_job/misc/init.rb
|
479
|
-
- bricks/delayed_job/misc/tasks.rb
|
480
476
|
- bricks/math/patch/application_helper.rb
|
481
477
|
- bricks/sphinx/MIT-LICENSE
|
482
478
|
- bricks/sphinx/README
|
@@ -493,6 +489,12 @@ files:
|
|
493
489
|
- bricks/tags/test/unit/tags_test.rb
|
494
490
|
- bricks/tags/test/zafu/tags.yml
|
495
491
|
- bricks/toto.zip
|
492
|
+
- bricks/worker/README
|
493
|
+
- bricks/worker/migrate/20091104191643_create_delayed_jobs_table.rb
|
494
|
+
- bricks/worker/misc/deploy.rb
|
495
|
+
- bricks/worker/misc/init.rb
|
496
|
+
- bricks/worker/misc/tasks.rb
|
497
|
+
- bricks/worker/misc/worker
|
496
498
|
- config/boot.rb
|
497
499
|
- config/bricks.yml
|
498
500
|
- config/database_example.yml
|
@@ -590,6 +592,7 @@ files:
|
|
590
592
|
- db/migrate/20091101184952_add_session_table.rb
|
591
593
|
- db/migrate/20091123175137_add_single_access_token.rb
|
592
594
|
- db/migrate/20091124161608_rebuild_fullpath.rb
|
595
|
+
- db/migrate/20100115134729_rebuild_fullpath_after_fix.rb
|
593
596
|
- db/schema.rb
|
594
597
|
- doc/README_FOR_APP
|
595
598
|
- doc/fixtures.graffle
|
@@ -1828,9 +1831,6 @@ files:
|
|
1828
1831
|
- script/performance/benchmarker
|
1829
1832
|
- script/performance/profiler
|
1830
1833
|
- script/plugin
|
1831
|
-
- script/process/inspector
|
1832
|
-
- script/process/reaper
|
1833
|
-
- script/process/spawner
|
1834
1834
|
- script/runner
|
1835
1835
|
- script/server
|
1836
1836
|
- script/set_revision
|
data/script/process/inspector
DELETED
data/script/process/reaper
DELETED
data/script/process/spawner
DELETED