backup 3.11.0 → 4.0.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/backup.rb +1 -4
- data/lib/backup/archive.rb +1 -1
- data/lib/backup/cli.rb +51 -107
- data/lib/backup/compressor/base.rb +2 -2
- data/lib/backup/compressor/bzip2.rb +0 -11
- data/lib/backup/compressor/gzip.rb +0 -11
- data/lib/backup/config.rb +45 -123
- data/lib/backup/config/dsl.rb +102 -0
- data/lib/backup/{configuration → config}/helpers.rb +23 -14
- data/lib/backup/database/base.rb +2 -2
- data/lib/backup/database/mongodb.rb +0 -18
- data/lib/backup/database/mysql.rb +6 -75
- data/lib/backup/database/postgresql.rb +0 -12
- data/lib/backup/database/redis.rb +85 -47
- data/lib/backup/database/riak.rb +0 -19
- data/lib/backup/encryptor/base.rb +2 -2
- data/lib/backup/encryptor/gpg.rb +1 -12
- data/lib/backup/logger/fog_adapter.rb +1 -2
- data/lib/backup/model.rb +3 -24
- data/lib/backup/notifier/base.rb +2 -17
- data/lib/backup/notifier/http_post.rb +1 -1
- data/lib/backup/notifier/mail.rb +5 -47
- data/lib/backup/notifier/prowl.rb +1 -1
- data/lib/backup/notifier/pushover.rb +1 -1
- data/lib/backup/packager.rb +1 -1
- data/lib/backup/pipeline.rb +1 -1
- data/lib/backup/splitter.rb +1 -1
- data/lib/backup/storage/base.rb +2 -14
- data/lib/backup/storage/cloud_files.rb +1 -0
- data/lib/backup/storage/cycler.rb +33 -88
- data/lib/backup/storage/dropbox.rb +19 -12
- data/lib/backup/storage/ftp.rb +1 -0
- data/lib/backup/storage/local.rb +1 -0
- data/lib/backup/storage/ninefold.rb +1 -0
- data/lib/backup/storage/rsync.rb +7 -41
- data/lib/backup/storage/s3.rb +1 -0
- data/lib/backup/storage/scp.rb +1 -0
- data/lib/backup/storage/sftp.rb +1 -0
- data/lib/backup/syncer/base.rb +2 -2
- data/lib/backup/syncer/cloud/cloud_files.rb +0 -16
- data/lib/backup/syncer/cloud/s3.rb +0 -16
- data/lib/backup/syncer/rsync/local.rb +0 -5
- data/lib/backup/syncer/rsync/pull.rb +0 -21
- data/lib/backup/syncer/rsync/push.rb +0 -21
- data/lib/backup/utilities.rb +2 -22
- data/lib/backup/version.rb +1 -1
- data/templates/cli/archive +0 -3
- data/templates/cli/compressor/custom +0 -4
- data/templates/cli/config +39 -17
- data/templates/cli/{database → databases}/mongodb +0 -0
- data/templates/cli/{database → databases}/mysql +0 -0
- data/templates/cli/{database → databases}/postgresql +0 -0
- data/templates/cli/databases/redis +16 -0
- data/templates/cli/{database → databases}/riak +0 -0
- data/templates/cli/{model.erb → model} +8 -5
- data/templates/cli/{notifier → notifiers}/campfire +0 -0
- data/templates/cli/{notifier → notifiers}/hipchat +0 -0
- data/templates/cli/{notifier → notifiers}/http_post +0 -3
- data/templates/cli/{notifier → notifiers}/mail +1 -2
- data/templates/cli/notifiers/nagios +13 -0
- data/templates/cli/{notifier → notifiers}/prowl +0 -0
- data/templates/cli/{notifier → notifiers}/pushover +0 -0
- data/templates/cli/{notifier → notifiers}/twitter +0 -0
- data/templates/cli/{storage → storages}/cloud_files +0 -2
- data/templates/cli/storages/dropbox +19 -0
- data/templates/cli/{storage → storages}/ftp +0 -0
- data/templates/cli/{storage → storages}/local +0 -0
- data/templates/cli/{storage → storages}/ninefold +0 -0
- data/templates/cli/{storage → storages}/rsync +0 -2
- data/templates/cli/{storage → storages}/s3 +0 -2
- data/templates/cli/{storage → storages}/scp +0 -0
- data/templates/cli/{storage → storages}/sftp +0 -0
- data/templates/cli/{syncer → syncers}/cloud_files +0 -2
- data/templates/cli/{syncer → syncers}/rsync_local +0 -0
- data/templates/cli/{syncer → syncers}/rsync_pull +0 -2
- data/templates/cli/{syncer → syncers}/rsync_push +0 -2
- data/templates/cli/{syncer → syncers}/s3 +0 -2
- data/templates/general/links +1 -1
- metadata +241 -69
- data/lib/backup/compressor/lzma.rb +0 -52
- data/lib/backup/compressor/pbzip2.rb +0 -59
- data/lib/backup/configuration.rb +0 -33
- data/lib/backup/configuration/store.rb +0 -24
- data/templates/cli/compressor/lzma +0 -10
- data/templates/cli/compressor/pbzip2 +0 -10
- data/templates/cli/database/redis +0 -18
- data/templates/cli/notifier/nagios +0 -13
- data/templates/cli/storage/dropbox +0 -20
@@ -4,12 +4,24 @@ require 'dropbox_sdk'
|
|
4
4
|
module Backup
|
5
5
|
module Storage
|
6
6
|
class Dropbox < Base
|
7
|
+
include Storage::Cycler
|
7
8
|
class Error < Backup::Error; end
|
8
9
|
|
9
10
|
##
|
10
11
|
# Dropbox API credentials
|
11
12
|
attr_accessor :api_key, :api_secret
|
12
13
|
|
14
|
+
##
|
15
|
+
# Path to store cached authorized session.
|
16
|
+
#
|
17
|
+
# Relative paths will be expanded using Config.root_path,
|
18
|
+
# which by default is ~/Backup unless --root-path was used
|
19
|
+
# on the command line or set in config.rb.
|
20
|
+
#
|
21
|
+
# By default, +cache_path+ is '.cache', which would be
|
22
|
+
# '~/Backup/.cache/' if using the default root_path.
|
23
|
+
attr_accessor :cache_path
|
24
|
+
|
13
25
|
##
|
14
26
|
# Dropbox Access Type
|
15
27
|
# Valid values are:
|
@@ -39,6 +51,7 @@ module Backup
|
|
39
51
|
super
|
40
52
|
|
41
53
|
@path ||= 'backups'
|
54
|
+
@cache_path ||= '.cache'
|
42
55
|
@access_type ||= :app_folder
|
43
56
|
@chunk_size ||= 4 # MiB
|
44
57
|
@max_retries ||= 10
|
@@ -54,7 +67,7 @@ module Backup
|
|
54
67
|
# authorization successfully took place. If this is the case, then the
|
55
68
|
# user hits 'enter' and the session will be properly established.
|
56
69
|
# Immediately after establishing the session, the session will be
|
57
|
-
# serialized and written to a cache file in
|
70
|
+
# serialized and written to a cache file in +cache_path+.
|
58
71
|
# The cached file will be used from that point on to re-establish a
|
59
72
|
# connection with Dropbox at a later time. This allows the user to avoid
|
60
73
|
# having to go to a new Dropbox URL to authorize over and over again.
|
@@ -121,12 +134,11 @@ module Backup
|
|
121
134
|
raise Error.wrap(err, 'Upload Failed!')
|
122
135
|
end
|
123
136
|
|
124
|
-
# Timeout::Error is not a StandardError under ruby-1.8.7
|
125
137
|
def with_retries
|
126
138
|
retries = 0
|
127
139
|
begin
|
128
140
|
yield
|
129
|
-
rescue StandardError
|
141
|
+
rescue StandardError => err
|
130
142
|
retries += 1
|
131
143
|
raise if retries > max_retries
|
132
144
|
|
@@ -145,13 +157,15 @@ module Backup
|
|
145
157
|
end
|
146
158
|
|
147
159
|
def cached_file
|
148
|
-
|
160
|
+
path = cache_path.start_with?('/') ?
|
161
|
+
cache_path : File.join(Config.root_path, cache_path)
|
162
|
+
File.join(path, api_key + api_secret)
|
149
163
|
end
|
150
164
|
|
151
165
|
##
|
152
166
|
# Serializes and writes the Dropbox session to a cache file
|
153
167
|
def write_cache!(session)
|
154
|
-
FileUtils.mkdir_p(
|
168
|
+
FileUtils.mkdir_p File.dirname(cached_file)
|
155
169
|
File.open(cached_file, "w") do |cache_file|
|
156
170
|
cache_file.write(session.serialize)
|
157
171
|
end
|
@@ -193,13 +207,6 @@ module Backup
|
|
193
207
|
raise Error.wrap(err, 'Could not create or authenticate a new session')
|
194
208
|
end
|
195
209
|
|
196
|
-
attr_deprecate :email, :version => '3.0.17'
|
197
|
-
attr_deprecate :password, :version => '3.0.17'
|
198
|
-
attr_deprecate :timeout, :version => '3.0.21'
|
199
|
-
|
200
|
-
attr_deprecate :chunk_retries, :version => '3.7.0',
|
201
|
-
:message => 'Use #max_retries instead.',
|
202
|
-
:action => lambda {|klass, val| klass.max_retries = val }
|
203
210
|
end
|
204
211
|
end
|
205
212
|
end
|
data/lib/backup/storage/ftp.rb
CHANGED
data/lib/backup/storage/local.rb
CHANGED
data/lib/backup/storage/rsync.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Backup
|
4
4
|
module Storage
|
5
5
|
class RSync < Base
|
6
|
-
include
|
6
|
+
include Utilities::Helpers
|
7
7
|
|
8
8
|
##
|
9
9
|
# Mode of operation
|
@@ -120,16 +120,11 @@ module Backup
|
|
120
120
|
# into. For `:ssh_daemon` or `:rsync_daemon` modes, this would reference
|
121
121
|
# an rsync module/path.
|
122
122
|
#
|
123
|
-
# In :ssh_daemon and :rsync_daemon modes,
|
124
|
-
#
|
125
|
-
# module) must already exist.
|
126
|
-
# Note that no additional `<trigger>` directory will be added to this path.
|
123
|
+
# In :ssh_daemon and :rsync_daemon modes, +path+ (or path defined by
|
124
|
+
# your rsync module) must already exist.
|
127
125
|
#
|
128
|
-
# In :ssh mode or local operation (no +host+ specified),
|
129
|
-
#
|
130
|
-
# if needed - either locally, or on the remote for :ssh mode.
|
131
|
-
# This behavior will change in v4.0, when :ssh mode and local operations
|
132
|
-
# will also store the files directly in the +path+ given.
|
126
|
+
# In :ssh mode or local operation (no +host+ specified), +path+ will
|
127
|
+
# be created if needed - either locally, or on the remote for :ssh mode.
|
133
128
|
attr_accessor :path
|
134
129
|
|
135
130
|
def initialize(model, storage_id = nil)
|
@@ -157,27 +152,16 @@ module Backup
|
|
157
152
|
remove_password_file
|
158
153
|
end
|
159
154
|
|
160
|
-
# Storage::RSync doesn't cycle
|
161
|
-
def cycle!; end
|
162
|
-
|
163
155
|
##
|
164
156
|
# Other storages add an additional timestamp directory to this path.
|
165
157
|
# This is not desired here, since we need to transfer the package files
|
166
158
|
# to the same location each time.
|
167
|
-
#
|
168
|
-
# Note: In v4.0, the additional trigger directory will to be dropped
|
169
|
-
# from remote_path for both local and :ssh mode, so the package files
|
170
|
-
# will be stored directly in #path.
|
171
159
|
def remote_path
|
172
160
|
@remote_path ||= begin
|
173
161
|
if host
|
174
|
-
|
175
|
-
File.join(path.sub(/^~\//, ''), package.trigger)
|
176
|
-
else
|
177
|
-
path.sub(/^~\//, '').sub(/\/$/, '')
|
178
|
-
end
|
162
|
+
path.sub(/^~\//, '').sub(/\/$/, '')
|
179
163
|
else
|
180
|
-
File.
|
164
|
+
File.expand_path(path)
|
181
165
|
end
|
182
166
|
end
|
183
167
|
end
|
@@ -259,24 +243,6 @@ module Backup
|
|
259
243
|
@password_file.delete if @password_file
|
260
244
|
end
|
261
245
|
|
262
|
-
attr_deprecate :local, :version => '3.2.0',
|
263
|
-
:message => "If 'host' is not set, the operation will be local."
|
264
|
-
|
265
|
-
attr_deprecate :username, :version => '3.2.0',
|
266
|
-
:message => 'Use #ssh_user instead.',
|
267
|
-
:action => lambda {|klass, val|
|
268
|
-
klass.ssh_user = val
|
269
|
-
}
|
270
|
-
attr_deprecate :password, :version => '3.2.0',
|
271
|
-
:message => 'Use #rsync_password instead.',
|
272
|
-
:action => lambda {|klass, val|
|
273
|
-
klass.rsync_password = val
|
274
|
-
}
|
275
|
-
attr_deprecate :ip, :version => '3.2.0',
|
276
|
-
:message => 'Use #host instead.',
|
277
|
-
:action => lambda {|klass, val|
|
278
|
-
klass.host = val
|
279
|
-
}
|
280
246
|
end
|
281
247
|
end
|
282
248
|
end
|
data/lib/backup/storage/s3.rb
CHANGED
data/lib/backup/storage/scp.rb
CHANGED
data/lib/backup/storage/sftp.rb
CHANGED
data/lib/backup/syncer/base.rb
CHANGED
@@ -77,22 +77,6 @@ module Backup
|
|
77
77
|
EOS
|
78
78
|
end
|
79
79
|
|
80
|
-
attr_deprecate :concurrency_type, :version => '3.7.0',
|
81
|
-
:message => 'Use #thread_count instead.',
|
82
|
-
:action => lambda {|klass, val|
|
83
|
-
if val == :threads
|
84
|
-
klass.thread_count = 2 unless klass.thread_count
|
85
|
-
else
|
86
|
-
klass.thread_count = 0
|
87
|
-
end
|
88
|
-
}
|
89
|
-
|
90
|
-
attr_deprecate :concurrency_level, :version => '3.7.0',
|
91
|
-
:message => 'Use #thread_count instead.',
|
92
|
-
:action => lambda {|klass, val|
|
93
|
-
klass.thread_count = val unless klass.thread_count == 0
|
94
|
-
}
|
95
|
-
|
96
80
|
end # class Cloudfiles < Base
|
97
81
|
end # module Cloud
|
98
82
|
end
|
@@ -104,22 +104,6 @@ module Backup
|
|
104
104
|
EOS
|
105
105
|
end
|
106
106
|
|
107
|
-
attr_deprecate :concurrency_type, :version => '3.7.0',
|
108
|
-
:message => 'Use #thread_count instead.',
|
109
|
-
:action => lambda {|klass, val|
|
110
|
-
if val == :threads
|
111
|
-
klass.thread_count = 2 unless klass.thread_count
|
112
|
-
else
|
113
|
-
klass.thread_count = 0
|
114
|
-
end
|
115
|
-
}
|
116
|
-
|
117
|
-
attr_deprecate :concurrency_level, :version => '3.7.0',
|
118
|
-
:message => 'Use #thread_count instead.',
|
119
|
-
:action => lambda {|klass, val|
|
120
|
-
klass.thread_count = val unless klass.thread_count == 0
|
121
|
-
}
|
122
|
-
|
123
107
|
end # Class S3 < Base
|
124
108
|
end # module Cloud
|
125
109
|
end
|
@@ -25,11 +25,6 @@ module Backup
|
|
25
25
|
FileUtils.mkdir_p dest_path
|
26
26
|
end
|
27
27
|
|
28
|
-
attr_deprecate :additional_options, :version => '3.2.0',
|
29
|
-
:message => 'Use #additional_rsync_options instead.',
|
30
|
-
:action => lambda {|klass, val|
|
31
|
-
klass.additional_rsync_options = val
|
32
|
-
}
|
33
28
|
end
|
34
29
|
end
|
35
30
|
end
|
@@ -45,27 +45,6 @@ module Backup
|
|
45
45
|
FileUtils.mkdir_p dest_path
|
46
46
|
end
|
47
47
|
|
48
|
-
attr_deprecate :additional_options, :version => '3.2.0',
|
49
|
-
:message => 'Use #additional_rsync_options instead.',
|
50
|
-
:action => lambda {|klass, val|
|
51
|
-
klass.additional_rsync_options = val
|
52
|
-
}
|
53
|
-
|
54
|
-
attr_deprecate :username, :version => '3.2.0',
|
55
|
-
:message => 'Use #ssh_user instead.',
|
56
|
-
:action => lambda {|klass, val|
|
57
|
-
klass.ssh_user = val
|
58
|
-
}
|
59
|
-
attr_deprecate :password, :version => '3.2.0',
|
60
|
-
:message => 'Use #rsync_password instead.',
|
61
|
-
:action => lambda {|klass, val|
|
62
|
-
klass.rsync_password = val
|
63
|
-
}
|
64
|
-
attr_deprecate :ip, :version => '3.2.0',
|
65
|
-
:message => 'Use #host instead.',
|
66
|
-
:action => lambda {|klass, val|
|
67
|
-
klass.host = val
|
68
|
-
}
|
69
48
|
end
|
70
49
|
end
|
71
50
|
end
|
@@ -199,27 +199,6 @@ module Backup
|
|
199
199
|
@password_file.delete if @password_file
|
200
200
|
end
|
201
201
|
|
202
|
-
attr_deprecate :additional_options, :version => '3.2.0',
|
203
|
-
:message => 'Use #additional_rsync_options instead.',
|
204
|
-
:action => lambda {|klass, val|
|
205
|
-
klass.additional_rsync_options = val
|
206
|
-
}
|
207
|
-
|
208
|
-
attr_deprecate :username, :version => '3.2.0',
|
209
|
-
:message => 'Use #ssh_user instead.',
|
210
|
-
:action => lambda {|klass, val|
|
211
|
-
klass.ssh_user = val
|
212
|
-
}
|
213
|
-
attr_deprecate :password, :version => '3.2.0',
|
214
|
-
:message => 'Use #rsync_password instead.',
|
215
|
-
:action => lambda {|klass, val|
|
216
|
-
klass.rsync_password = val
|
217
|
-
}
|
218
|
-
attr_deprecate :ip, :version => '3.2.0',
|
219
|
-
:message => 'Use #host instead.',
|
220
|
-
:action => lambda {|klass, val|
|
221
|
-
klass.host = val
|
222
|
-
}
|
223
202
|
end
|
224
203
|
end
|
225
204
|
end
|
data/lib/backup/utilities.rb
CHANGED
@@ -7,9 +7,8 @@ module Backup
|
|
7
7
|
UTILITY = {}
|
8
8
|
NAMES = %w{
|
9
9
|
tar cat split sudo chown hostname
|
10
|
-
gzip bzip2
|
11
|
-
mongo mongodump mysqldump
|
12
|
-
pg_dump pg_dumpall redis-cli riak-admin
|
10
|
+
gzip bzip2
|
11
|
+
mongo mongodump mysqldump pg_dump pg_dumpall redis-cli riak-admin
|
13
12
|
gpg openssl
|
14
13
|
rsync ssh
|
15
14
|
sendmail exim
|
@@ -73,8 +72,6 @@ module Backup
|
|
73
72
|
# # Compressors
|
74
73
|
# gzip '/path/to/gzip'
|
75
74
|
# bzip2 '/path/to/bzip2'
|
76
|
-
# lzma '/path/to/lzma' # deprecated. use a Custom Compressor
|
77
|
-
# pbzip2 '/path/to/pbzip2' # deprecated. use a Custom Compressor
|
78
75
|
#
|
79
76
|
# # Database Utilities
|
80
77
|
# mongo '/path/to/mongo'
|
@@ -101,17 +98,6 @@ module Backup
|
|
101
98
|
#
|
102
99
|
# These paths may be set using absolute paths, or relative to the
|
103
100
|
# working directory when Backup is run.
|
104
|
-
#
|
105
|
-
# Note that many of Backup's components currently have their own
|
106
|
-
# configuration settings for utility paths. For instance, when configuring
|
107
|
-
# a +MySQL+ database backup, +mysqldump_utility+ may be used:
|
108
|
-
#
|
109
|
-
# database MySQL do |db|
|
110
|
-
# db.mysqldump_utility = '/path/to/mysqldump'
|
111
|
-
# end
|
112
|
-
#
|
113
|
-
# Use of these configuration settings will override the path set here.
|
114
|
-
# (The use of these may be deprecated in the future)
|
115
101
|
def configure(&block)
|
116
102
|
DSL.instance_eval(&block)
|
117
103
|
end
|
@@ -184,18 +170,12 @@ module Backup
|
|
184
170
|
|
185
171
|
begin
|
186
172
|
out, err = '', ''
|
187
|
-
# popen4 doesn't work in 1.8.7 with stock versions of ruby shipped
|
188
|
-
# with major OSs. Hack to make it stop segfaulting.
|
189
|
-
# See: https://github.com/engineyard/engineyard/issues/115
|
190
|
-
GC.disable if RUBY_VERSION < '1.9'
|
191
173
|
ps = Open4.popen4(command) do |pid, stdin, stdout, stderr|
|
192
174
|
stdin.close
|
193
175
|
out, err = stdout.read.strip, stderr.read.strip
|
194
176
|
end
|
195
177
|
rescue Exception => e
|
196
178
|
raise Error.wrap(e, "Failed to execute '#{ name }'")
|
197
|
-
ensure
|
198
|
-
GC.enable if RUBY_VERSION < '1.9'
|
199
179
|
end
|
200
180
|
|
201
181
|
if ps.success?
|
data/lib/backup/version.rb
CHANGED
data/templates/cli/archive
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
##
|
2
2
|
# Custom [Compressor]
|
3
3
|
#
|
4
|
-
# For information on using a Custom Compressor,
|
5
|
-
# please see the following Wiki page:
|
6
|
-
# https://github.com/meskyanichi/backup/wiki/Compressors
|
7
|
-
#
|
8
4
|
compress_with Custom do |compressor|
|
9
5
|
compressor.command = 'gzip'
|
10
6
|
compressor.extension = '.gz'
|
data/templates/cli/config
CHANGED
@@ -1,14 +1,47 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
##
|
4
|
-
# Backup
|
5
|
-
# Generated Main Config Template
|
4
|
+
# Backup v<%= Backup::VERSION.split('.').first %>.x Configuration
|
6
5
|
#
|
7
|
-
#
|
6
|
+
# Documentation: http://meskyanichi.github.io/backup
|
7
|
+
# Issue Tracker: https://github.com/meskyanichi/backup/issues
|
8
|
+
|
9
|
+
##
|
10
|
+
# Config Options
|
11
|
+
#
|
12
|
+
# The options here may be overridden on the command line, but the result
|
13
|
+
# will depend on the use of --root-path on the command line.
|
14
|
+
#
|
15
|
+
# If --root-path is used on the command line, then all paths set here
|
16
|
+
# will be overridden. If a path (like --tmp-path) is not given along with
|
17
|
+
# --root-path, that path will use it's default location _relative to --root-path_.
|
18
|
+
#
|
19
|
+
# If --root-path is not used on the command line, a path option (like --tmp-path)
|
20
|
+
# given on the command line will override the tmp_path set here, but all other
|
21
|
+
# paths set here will be used.
|
22
|
+
#
|
23
|
+
# Note that relative paths given on the command line without --root-path
|
24
|
+
# are relative to the current directory. The root_path set here only applies
|
25
|
+
# to relative paths set here.
|
26
|
+
#
|
27
|
+
# ---
|
28
|
+
#
|
29
|
+
# Sets the root path for all relative paths, including default paths.
|
30
|
+
# May be an absolute path, or relative to the current working directory.
|
8
31
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
32
|
+
# root_path 'my/root'
|
33
|
+
#
|
34
|
+
# Sets the path where backups are processed until they're stored.
|
35
|
+
# This must have enough free space to hold apx. 2 backups.
|
36
|
+
# May be an absolute path, or relative to the current directory or +root_path+.
|
37
|
+
#
|
38
|
+
# tmp_path 'my/tmp'
|
39
|
+
#
|
40
|
+
# Sets the path where backup stores persistent information.
|
41
|
+
# When Backup's Cycler is used, small YAML files are stored here.
|
42
|
+
# May be an absolute path, or relative to the current directory or +root_path+.
|
43
|
+
#
|
44
|
+
# data_path 'my/data'
|
12
45
|
|
13
46
|
##
|
14
47
|
# Utilities
|
@@ -88,14 +121,3 @@
|
|
88
121
|
# mail.to = 'john.smith@email.com'
|
89
122
|
# end
|
90
123
|
# end
|
91
|
-
|
92
|
-
|
93
|
-
# * * * * * * * * * * * * * * * * * * * *
|
94
|
-
# Do Not Edit Below Here.
|
95
|
-
# All Configuration Should Be Made Above.
|
96
|
-
|
97
|
-
##
|
98
|
-
# Load all models from the models directory.
|
99
|
-
Dir[File.join(File.dirname(Config.config_file), "models", "*.rb")].each do |model|
|
100
|
-
instance_eval(File.read(model))
|
101
|
-
end
|