orats 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +267 -216
- data/lib/orats/commands/common.rb +39 -0
- data/lib/orats/commands/new/ansible.rb +9 -9
- data/lib/orats/commands/new/exec.rb +3 -0
- data/lib/orats/commands/new/rails.rb +109 -39
- data/lib/orats/commands/nuke.rb +3 -3
- data/lib/orats/commands/outdated/compare.rb +4 -4
- data/lib/orats/commands/play.rb +2 -15
- data/lib/orats/commands/ui.rb +2 -2
- data/lib/orats/templates/auth.rb +350 -378
- data/lib/orats/templates/base.rb +371 -470
- data/lib/orats/templates/includes/Gemfile +6 -7
- data/lib/orats/templates/play.rb +82 -72
- data/lib/orats/version.rb +1 -1
- metadata +2 -2
data/lib/orats/templates/base.rb
CHANGED
@@ -1,49 +1,57 @@
|
|
1
|
-
# =====================================================================================================
|
2
|
-
# Template for generating an opinionated base Rails 4.1.0 project using Ruby 2.1.2
|
3
|
-
# =====================================================================================================
|
4
|
-
|
5
|
-
# ----- Helper functions and variables ----------------------------------------------------------------
|
6
|
-
|
7
1
|
require 'securerandom'
|
8
2
|
|
3
|
+
# =============================================================================
|
4
|
+
# template for generating an orats base project for rails 4.1.x
|
5
|
+
# =============================================================================
|
6
|
+
# view the task list at the bottom of the file
|
7
|
+
# -----------------------------------------------------------------------------
|
8
|
+
|
9
|
+
# -----------------------------------------------------------------------------
|
10
|
+
# private functions
|
11
|
+
# -----------------------------------------------------------------------------
|
9
12
|
def generate_token
|
10
13
|
SecureRandom.hex(64)
|
11
14
|
end
|
12
15
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
if destination.include? '/'
|
19
|
-
run "mkdir -p #{destination}"
|
20
|
-
end
|
21
|
-
end
|
16
|
+
def method_to_sentence(method)
|
17
|
+
method.tr!('_', ' ')
|
18
|
+
method[0] = method[0].upcase
|
19
|
+
method
|
20
|
+
end
|
22
21
|
|
23
|
-
|
22
|
+
def log_task(message)
|
23
|
+
puts
|
24
|
+
say_status 'task', "#{method_to_sentence(message.to_s)}:", :yellow
|
25
|
+
puts '-'*80, ''; sleep 0.25
|
24
26
|
end
|
25
27
|
|
26
|
-
|
28
|
+
def git_commit(message)
|
29
|
+
git add: '-A'
|
30
|
+
git commit: "-m '#{message}'"
|
31
|
+
end
|
27
32
|
|
28
|
-
|
33
|
+
def copy_from_local_gem(source, dest)
|
34
|
+
base_path = "#{File.expand_path File.dirname(__FILE__)}/includes"
|
35
|
+
file_name_of_source = File.basename(source)
|
29
36
|
|
30
|
-
|
31
|
-
|
32
|
-
|
37
|
+
run "mkdir -p #{File.dirname(dest)}" if dest.present? && file_name_of_source != dest
|
38
|
+
run "cp #{base_path}/#{source} #{dest}"
|
39
|
+
end
|
33
40
|
|
34
|
-
|
35
|
-
git add: '-A'
|
36
|
-
git commit: "-m 'Initial commit'"
|
41
|
+
# ---
|
37
42
|
|
38
|
-
|
43
|
+
def initial_git_commit
|
44
|
+
log_task __method__
|
39
45
|
|
40
|
-
|
41
|
-
|
42
|
-
|
46
|
+
git :init
|
47
|
+
git_commit 'Initial git commit'
|
48
|
+
end
|
43
49
|
|
44
|
-
|
50
|
+
def update_gitignore
|
51
|
+
log_task __method__
|
45
52
|
|
46
|
-
|
53
|
+
append_to_file '.gitignore' do <<-S
|
54
|
+
# OS and editor files
|
47
55
|
.DS_Store
|
48
56
|
*/**.DS_Store
|
49
57
|
._*
|
@@ -51,41 +59,37 @@ append_to_file '.gitignore' do <<-TEXT
|
|
51
59
|
*~
|
52
60
|
.idea/
|
53
61
|
|
54
|
-
#
|
62
|
+
# the dotenv file
|
55
63
|
.env
|
56
64
|
|
57
|
-
#
|
65
|
+
# app specific folders
|
58
66
|
/vendor/bundle
|
59
67
|
/public/assets/*
|
60
|
-
|
68
|
+
S
|
69
|
+
end
|
70
|
+
git_commit 'Add common OS files, editor files and other paths'
|
61
71
|
end
|
62
72
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# ----- Add a bundler config --------------------------------------------------------------------
|
73
|
+
def copy_gemfile
|
74
|
+
log_task __method__
|
67
75
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# file '.bundle/config' do <<-CODE
|
73
|
-
# ---
|
74
|
-
# BUNDLE_WITHOUT: production:staging
|
75
|
-
# CODE
|
76
|
-
# end
|
77
|
-
#
|
78
|
-
# git add: '-A'
|
79
|
-
# git commit: "-m 'Add .bundle/config to ignore production:staging in development mode'"
|
76
|
+
run 'rm -f Gemfile'
|
77
|
+
copy_from_local_gem 'Gemfile', 'Gemfile'
|
78
|
+
git_commit 'Add Gemfile'
|
79
|
+
end
|
80
80
|
|
81
|
+
def copy_base_favicon
|
82
|
+
log_task __method__
|
81
83
|
|
82
|
-
|
84
|
+
copy_from_local_gem 'app/assets/favicon/favicon_base.png',
|
85
|
+
'app/assets/favicon/favicon_base.png'
|
86
|
+
git_commit 'Add a 256x256 base favicon'
|
87
|
+
end
|
83
88
|
|
84
|
-
|
85
|
-
|
86
|
-
puts '-'*80, ''; sleep 0.25
|
89
|
+
def add_dotenv
|
90
|
+
log_task 'add_dotenv'
|
87
91
|
|
88
|
-
file '.env' do <<-
|
92
|
+
file '.env' do <<-S
|
89
93
|
RAILS_ENV: development
|
90
94
|
|
91
95
|
PROJECT_PATH: /full/path/to/your/project
|
@@ -127,43 +131,28 @@ PUMA_THREADS_MAX: 1
|
|
127
131
|
PUMA_WORKERS: 0
|
128
132
|
|
129
133
|
SIDEKIQ_CONCURRENCY: 25
|
130
|
-
|
134
|
+
S
|
135
|
+
end
|
136
|
+
git_commit 'Add development environment file'
|
131
137
|
end
|
132
138
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
# ----- Create the foreman Procfile ------------------------------------------------------------------------
|
139
|
+
def add_procfile
|
140
|
+
log_task __method__
|
137
141
|
|
138
|
-
|
139
|
-
say_status 'start', 'Creating the Procfile for foreman...', :yellow
|
140
|
-
puts '-'*80, ''; sleep 0.25
|
141
|
-
|
142
|
-
file 'Procfile' do <<-CODE
|
142
|
+
file 'Procfile' do <<-S
|
143
143
|
web: puma -C config/puma.rb
|
144
144
|
worker: sidekiq -C config/sidekiq.yml
|
145
|
-
|
145
|
+
log: tail -f log/development.log
|
146
|
+
S
|
147
|
+
end
|
148
|
+
git_commit 'Add a Procfile'
|
146
149
|
end
|
147
150
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
# ----- Modify the secrets yaml file -----------------------------------------------------------------------
|
152
|
-
|
153
|
-
gsub_file 'config/secrets.yml', /.*\n/, ''
|
154
|
-
append_file 'config/secrets.yml' do <<-FILE
|
155
|
-
# Be sure to restart your server when you modify this file.
|
156
|
-
|
157
|
-
# Your secret key is used for verifying the integrity of signed cookies.
|
158
|
-
# If you change this key, all old signed cookies will become invalid!
|
159
|
-
|
160
|
-
# Make sure the secret is at least 30 characters and all random,
|
161
|
-
# no regular words or you'll be exposed to dictionary attacks.
|
162
|
-
# You can use `rake secret` to generate a secure secret key.
|
163
|
-
|
164
|
-
# Make sure the secrets in this file are kept private
|
165
|
-
# if you're sharing your code publicly.
|
151
|
+
def update_app_secrets
|
152
|
+
log_task __method__
|
166
153
|
|
154
|
+
gsub_file 'config/secrets.yml', /.*\n/, ''
|
155
|
+
append_file 'config/secrets.yml' do <<-S
|
167
156
|
development: &default
|
168
157
|
secret_key_base: <%= ENV['TOKEN_RAILS_SECRET'] %>
|
169
158
|
|
@@ -175,19 +164,15 @@ staging:
|
|
175
164
|
|
176
165
|
production:
|
177
166
|
<<: *default
|
178
|
-
|
167
|
+
S
|
168
|
+
end
|
169
|
+
git_commit 'DRY out the yaml'
|
179
170
|
end
|
180
171
|
|
181
|
-
|
182
|
-
|
172
|
+
def update_app_config
|
173
|
+
log_task __method__
|
183
174
|
|
184
|
-
|
185
|
-
|
186
|
-
puts
|
187
|
-
say_status 'config', 'Modifying the application file...', :yellow
|
188
|
-
puts '-'*80, ''; sleep 0.25
|
189
|
-
|
190
|
-
inject_into_file 'config/application.rb', after: "automatically loaded.\n" do <<-CODE
|
175
|
+
inject_into_file 'config/application.rb', after: "automatically loaded.\n" do <<-S
|
191
176
|
config.action_mailer.delivery_method = :smtp
|
192
177
|
config.action_mailer.smtp_settings = {
|
193
178
|
:address => ENV['SMTP_ADDRESS'],
|
@@ -197,9 +182,9 @@ inject_into_file 'config/application.rb', after: "automatically loaded.\n" do <<
|
|
197
182
|
:password => ENV['SMTP_PASSWORD'],
|
198
183
|
:authentication => ENV['SMTP_AUTH']
|
199
184
|
}
|
185
|
+
|
200
186
|
config.action_mailer.smtp_settings[:enable_starttls_auto] = true if ENV['SMTP_ENCRYPTION'] == 'starttls'
|
201
187
|
config.action_mailer.smtp_settings[:ssl] = true if ENV['SMTP_ENCRYPTION'] == 'ssl'
|
202
|
-
|
203
188
|
config.action_mailer.default_options = { from: ENV['ACTION_MAILER_DEFAULT_FROM'] }
|
204
189
|
config.action_mailer.default_url_options = { host: ENV['ACTION_MAILER_HOST'] }
|
205
190
|
|
@@ -208,15 +193,15 @@ inject_into_file 'config/application.rb', after: "automatically loaded.\n" do <<
|
|
208
193
|
db: ENV['CACHE_DATABASE'].to_i,
|
209
194
|
namespace: '#{app_name}::cache'
|
210
195
|
}
|
211
|
-
redis_store_options[:password] = ENV['CACHE_PASSWORD'] if ENV['CACHE_PASSWORD'].present?
|
212
196
|
|
197
|
+
redis_store_options[:password] = ENV['CACHE_PASSWORD'] if ENV['CACHE_PASSWORD'].present?
|
213
198
|
config.cache_store = :redis_store, redis_store_options
|
214
|
-
|
215
|
-
end
|
216
|
-
|
217
|
-
gsub_file 'config/application.rb', "# config.time_zone = 'Central Time (US & Canada)'", "config.time_zone = 'Eastern Time (US & Canada)'"
|
199
|
+
S
|
200
|
+
end
|
218
201
|
|
219
|
-
|
202
|
+
gsub_file 'config/application.rb',
|
203
|
+
"# config.time_zone = 'Central Time (US & Canada)'","config.time_zone = 'Eastern Time (US & Canada)'"
|
204
|
+
append_file 'config/application.rb' do <<-'S'
|
220
205
|
|
221
206
|
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
222
207
|
if html_tag =~ /\<label/
|
@@ -226,20 +211,16 @@ ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
|
226
211
|
%(#{html_tag}<p class="validation-error"> #{errors}</p>).html_safe
|
227
212
|
end
|
228
213
|
end
|
229
|
-
|
214
|
+
S
|
215
|
+
end
|
216
|
+
git_commit 'Configure the mailer/redis, update the timezone and adjust the validation output'
|
230
217
|
end
|
231
218
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
# ----- Modify the config files -----------------------------------------------------------------------
|
219
|
+
def update_database_config
|
220
|
+
log_task __method__
|
236
221
|
|
237
|
-
|
238
|
-
|
239
|
-
puts '-'*80, ''; sleep 0.25
|
240
|
-
|
241
|
-
gsub_file 'config/database.yml', /.*\n/, ''
|
242
|
-
append_file 'config/database.yml' do <<-FILE
|
222
|
+
gsub_file 'config/database.yml', /.*\n/, ''
|
223
|
+
append_file 'config/database.yml' do <<-S
|
243
224
|
development: &default
|
244
225
|
adapter: postgresql
|
245
226
|
database: <%= ENV['DATABASE_NAME'] %>
|
@@ -258,13 +239,15 @@ staging:
|
|
258
239
|
|
259
240
|
production:
|
260
241
|
<<: *default
|
261
|
-
|
242
|
+
S
|
243
|
+
end
|
244
|
+
git_commit 'DRY out the yaml'
|
262
245
|
end
|
263
246
|
|
264
|
-
|
265
|
-
|
247
|
+
def add_puma_config
|
248
|
+
log_task __method__
|
266
249
|
|
267
|
-
file 'config/puma.rb', <<-'
|
250
|
+
file 'config/puma.rb', <<-'S'
|
268
251
|
environment ENV['RAILS_ENV']
|
269
252
|
|
270
253
|
threads ENV['PUMA_THREADS_MIN'].to_i,ENV['PUMA_THREADS_MAX'].to_i
|
@@ -285,28 +268,32 @@ restart_command 'bundle exec bin/puma'
|
|
285
268
|
|
286
269
|
on_worker_boot do
|
287
270
|
require 'active_record'
|
288
|
-
config_path = File.expand_path('../database.yml', __FILE__)
|
289
271
|
|
272
|
+
config_path = File.expand_path('../database.yml', __FILE__)
|
290
273
|
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
|
291
274
|
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || YAML.load_file(config_path)[ENV['RAILS_ENV']])
|
292
275
|
end
|
293
|
-
|
276
|
+
S
|
277
|
+
git_commit 'Add the puma config'
|
278
|
+
end
|
294
279
|
|
295
|
-
|
296
|
-
|
280
|
+
def add_sidekiq_config
|
281
|
+
log_task __method__
|
297
282
|
|
298
|
-
file 'config/sidekiq.yml', <<-
|
283
|
+
file 'config/sidekiq.yml', <<-S
|
299
284
|
---
|
300
285
|
:pidfile: <%= ENV['PROJECT_PATH'] %>/tmp/sidekiq.pid
|
301
286
|
:concurrency: <%= ENV['SIDEKIQ_CONCURRENCY'].to_i %>
|
302
287
|
:queues:
|
303
288
|
- default
|
304
|
-
|
289
|
+
S
|
290
|
+
git_commit 'Add the sidekiq config'
|
291
|
+
end
|
305
292
|
|
306
|
-
|
307
|
-
|
293
|
+
def add_sitemap_config
|
294
|
+
log_task __method__
|
308
295
|
|
309
|
-
file 'config/sitemap.rb', <<-'
|
296
|
+
file 'config/sitemap.rb', <<-'S'
|
310
297
|
# Set the host name for URL creation
|
311
298
|
SitemapGenerator::Sitemap.default_host = "http://www.app_name.com"
|
312
299
|
|
@@ -327,14 +314,15 @@ SitemapGenerator::Sitemap.create do
|
|
327
314
|
# add article_path("#{article.id}-#{article.permalink}"), priority: 0.9, lastmod: article.updated_at
|
328
315
|
# end
|
329
316
|
end
|
330
|
-
|
331
|
-
|
332
|
-
|
317
|
+
S
|
318
|
+
gsub_file 'config/sitemap.rb', 'app_name', app_name
|
319
|
+
git_commit 'Add the sitemap config'
|
320
|
+
end
|
333
321
|
|
334
|
-
|
335
|
-
|
322
|
+
def add_whenever_config
|
323
|
+
log_task __method__
|
336
324
|
|
337
|
-
file 'config/schedule.rb', <<-
|
325
|
+
file 'config/schedule.rb', <<-S
|
338
326
|
every 1.day, at: '3:00 am' do
|
339
327
|
rake 'orats:backup'
|
340
328
|
end
|
@@ -342,52 +330,14 @@ end
|
|
342
330
|
every 1.day, at: '4:00 am' do
|
343
331
|
rake 'sitemap:refresh'
|
344
332
|
end
|
345
|
-
|
346
|
-
|
347
|
-
git add: '-A'
|
348
|
-
git commit: "-m 'Add a sitemap rake task that occurs at 4am'"
|
349
|
-
|
350
|
-
# ----- Modify the environment files ------------------------------------------------------------------
|
351
|
-
|
352
|
-
puts
|
353
|
-
say_status 'Config', 'Modifying the environment files...', :yellow
|
354
|
-
puts '-'*80, ''; sleep 0.25
|
355
|
-
|
356
|
-
file 'config/environments/staging.rb', <<-CODE
|
357
|
-
require_relative 'production.rb'
|
358
|
-
|
359
|
-
#{app_name_class}::Application.configure do
|
360
|
-
# Overwrite any production settings here, or if you want to start from scratch then remove line 1.
|
361
|
-
end
|
362
|
-
CODE
|
363
|
-
|
364
|
-
git add: '-A'
|
365
|
-
git commit: "-m 'Add add staging environment'"
|
366
|
-
|
367
|
-
inject_into_file 'config/environments/production.rb', after: "config.log_level = :info\n" do <<-"CODE"
|
368
|
-
config.logger = Logger.new(config.paths['log'].first, 'daily')
|
369
|
-
CODE
|
333
|
+
S
|
334
|
+
git_commit 'Add the whenever config'
|
370
335
|
end
|
371
336
|
|
372
|
-
|
373
|
-
|
374
|
-
if path =~ /\.(eot|svg|ttf|woff|png)\z/
|
375
|
-
true
|
376
|
-
end
|
377
|
-
}
|
378
|
-
CODE
|
379
|
-
end
|
380
|
-
|
381
|
-
git add: '-A'
|
382
|
-
git commit: "-m 'Change production config options'"
|
383
|
-
|
384
|
-
# ----- Modify the initializer files ------------------------------------------------------------------
|
385
|
-
|
386
|
-
puts
|
387
|
-
say_status 'config', 'Modifying the initializer files...', :yellow
|
388
|
-
puts '-'*80, ''; sleep 0.25
|
337
|
+
def add_sidekiq_initializer
|
338
|
+
log_task __method__
|
389
339
|
|
390
|
-
file 'config/initializers/sidekiq.rb', <<-'
|
340
|
+
file 'config/initializers/sidekiq.rb', <<-'S'
|
391
341
|
ENV['CACHE_PASSWORD'].present? ? pass_string = ":#{ENV['CACHE_PASSWORD']}@" : pass_string = ''
|
392
342
|
|
393
343
|
redis_host = "#{pass_string}#{ENV['CACHE_HOST']}"
|
@@ -404,145 +354,83 @@ end
|
|
404
354
|
Sidekiq.configure_client do |config|
|
405
355
|
config.redis = sidekiq_config
|
406
356
|
end
|
407
|
-
|
408
|
-
|
409
|
-
|
357
|
+
S
|
358
|
+
gsub_file 'config/initializers/sidekiq.rb', 'ns_app', app_name
|
359
|
+
git_commit 'Add the sidekiq initializer'
|
360
|
+
end
|
410
361
|
|
411
|
-
|
412
|
-
|
362
|
+
def add_mini_profiler_initializer
|
363
|
+
log_task __method__
|
413
364
|
|
414
|
-
file 'config/initializers/mini_profiler.rb', <<-
|
365
|
+
file 'config/initializers/mini_profiler.rb', <<-S
|
415
366
|
if defined? Rack::MiniProfiler
|
416
367
|
# Toggle with ALT+p
|
417
368
|
Rack::MiniProfiler.config.start_hidden = true
|
418
369
|
end
|
419
|
-
|
420
|
-
|
421
|
-
git add: '-A'
|
422
|
-
git commit: "-m 'Add the rack mini profiler initializer'"
|
423
|
-
|
424
|
-
# ----- Modify the routes file ------------------------------------------------------------------------
|
425
|
-
|
426
|
-
puts
|
427
|
-
say_status 'config', 'Modifying the routes file...', :yellow
|
428
|
-
puts '-'*80, ''; sleep 0.25
|
429
|
-
|
430
|
-
prepend_file 'config/routes.rb', "require 'sidekiq/web'\n\n"
|
431
|
-
|
432
|
-
git add: '-A'
|
433
|
-
git commit: "-m 'Add sidekiq to the routes file'"
|
434
|
-
|
435
|
-
inject_into_file 'config/routes.rb', after: "draw do\n" do <<-CODE
|
436
|
-
concern :pageable do
|
437
|
-
get 'page/:page', action: :index, on: :collection
|
438
|
-
end
|
439
|
-
CODE
|
370
|
+
S
|
371
|
+
git_commit 'Add the mini profiler initializer'
|
440
372
|
end
|
441
373
|
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
# ----- Creating application tasks --------------------------------------------------------------------
|
446
|
-
|
447
|
-
puts
|
448
|
-
say_status 'tasks', 'Creating application tasks...', :yellow
|
449
|
-
puts '-'*80, ''; sleep 0.25
|
374
|
+
def add_staging_environment
|
375
|
+
log_task __method__
|
450
376
|
|
451
|
-
file '
|
452
|
-
|
453
|
-
desc 'Create favicons from a single base png'
|
454
|
-
task :favicons do
|
455
|
-
require 'favicon_maker'
|
456
|
-
|
457
|
-
FaviconMaker.generate do
|
458
|
-
setup do
|
459
|
-
template_dir Rails.root.join('app', 'assets', 'favicon')
|
460
|
-
output_dir Rails.root.join('public')
|
461
|
-
end
|
377
|
+
file 'config/environments/staging.rb', <<-S
|
378
|
+
require_relative 'production.rb'
|
462
379
|
|
463
|
-
|
380
|
+
#{app_name.humanize}::Application.configure do
|
381
|
+
# Overwrite any production settings here, or if you want to start from scratch then remove line 1.
|
382
|
+
end
|
383
|
+
S
|
384
|
+
git_commit 'Add a staging environment'
|
385
|
+
end
|
464
386
|
|
465
|
-
|
466
|
-
|
467
|
-
puts 'A base favicon could not be found, make sure one exists at:'
|
468
|
-
puts base_favicon
|
469
|
-
puts
|
470
|
-
exit 1
|
471
|
-
end
|
387
|
+
def update_production_environment
|
388
|
+
log_task __method__
|
472
389
|
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
icon 'apple-touch-icon-120x120-precomposed.png'
|
479
|
-
icon 'apple-touch-icon-114x114-precomposed.png'
|
480
|
-
icon 'apple-touch-icon-76x76-precomposed.png'
|
481
|
-
icon 'apple-touch-icon-72x72-precomposed.png'
|
482
|
-
icon 'apple-touch-icon-60x60-precomposed.png'
|
483
|
-
icon 'apple-touch-icon-57x57-precomposed.png'
|
484
|
-
icon 'favicon-196x196.png'
|
485
|
-
icon 'favicon-160x160.png'
|
486
|
-
icon 'favicon-96x96.png'
|
487
|
-
icon 'favicon-64x64.png'
|
488
|
-
icon 'favicon-32x32.png'
|
489
|
-
icon 'favicon-24x24.png'
|
490
|
-
icon 'favicon-16x16.png'
|
491
|
-
icon 'favicon.ico', size: '64x64,32x32,24x24,16x16'
|
492
|
-
end
|
390
|
+
inject_into_file 'config/environments/production.rb', after: "config.log_level = :info\n" do <<-'S'
|
391
|
+
config.logger = Logger.new(config.paths['log'].first, 'daily')
|
392
|
+
S
|
393
|
+
end
|
394
|
+
git_commit 'Update the logger to rotate daily'
|
493
395
|
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
396
|
+
inject_into_file 'config/environments/production.rb', after: "%w( search.js )\n" do <<-'S'
|
397
|
+
config.assets.precompile << Proc.new { |path|
|
398
|
+
if path =~ /\.(eot|svg|ttf|woff|png)\z/
|
399
|
+
true
|
400
|
+
end
|
401
|
+
}
|
402
|
+
S
|
498
403
|
end
|
404
|
+
git_commit 'Update the assets precompiler to include common file types'
|
499
405
|
end
|
500
|
-
CODE
|
501
406
|
|
502
|
-
|
503
|
-
|
407
|
+
def update_routes
|
408
|
+
log_task __method__
|
504
409
|
|
505
|
-
|
506
|
-
namespace :orats do
|
507
|
-
desc 'Create a backup of your application for a specific environment'
|
508
|
-
task :backup do
|
509
|
-
if File.exist?('.env') && File.file?('.env')
|
510
|
-
require 'dotenv'
|
511
|
-
Dotenv.load
|
512
|
-
|
513
|
-
source_external_env = ''
|
514
|
-
else
|
515
|
-
source_external_env = '. /etc/default/app_name &&'
|
516
|
-
end
|
410
|
+
prepend_file 'config/routes.rb', "require 'sidekiq/web'\n\n"
|
517
411
|
|
518
|
-
|
519
|
-
|
520
|
-
|
412
|
+
inject_into_file 'config/routes.rb', after: "draw do\n" do <<-S
|
413
|
+
concern :pageable do
|
414
|
+
get 'page/:page', action: :index, on: :collection
|
415
|
+
end
|
521
416
|
|
522
|
-
|
417
|
+
# you may want to protect this behind authentication
|
418
|
+
mount Sidekiq::Web => '/sidekiq'
|
419
|
+
S
|
523
420
|
end
|
421
|
+
git_commit 'Add a concern for pagination and mount sidekiq'
|
524
422
|
end
|
525
|
-
CODE
|
526
|
-
|
527
|
-
gsub_file 'lib/tasks/orats/backup.rake', 'app_name', app_name
|
528
|
-
|
529
|
-
git add: '-A'
|
530
|
-
git commit: "-m 'Add a backup task'"
|
531
|
-
|
532
|
-
# ----- Creating application backup --------------------------------------------------------------------
|
533
423
|
|
534
|
-
|
535
|
-
|
536
|
-
puts '-'*80, ''; sleep 0.25
|
424
|
+
def add_backup_lib
|
425
|
+
log_task __method__
|
537
426
|
|
538
|
-
file 'lib/backup/config.rb', <<-'
|
427
|
+
file 'lib/backup/config.rb', <<-'S'
|
539
428
|
##
|
540
429
|
# Backup v4.x Configuration
|
541
430
|
#
|
542
431
|
# Documentation: http://meskyanichi.github.io/backup
|
543
432
|
# Issue Tracker: https://github.com/meskyanichi/backup/issues
|
544
433
|
|
545
|
-
##
|
546
434
|
# Config Options
|
547
435
|
#
|
548
436
|
# The options here may be overridden on the command line, but the result
|
@@ -564,27 +452,21 @@ file 'lib/backup/config.rb', <<-'CODE'
|
|
564
452
|
#
|
565
453
|
# Sets the root path for all relative paths, including default paths.
|
566
454
|
# May be an absolute path, or relative to the current working directory.
|
567
|
-
#
|
568
455
|
|
569
456
|
root_path 'lib/backup'
|
570
457
|
|
571
|
-
#
|
572
458
|
# Sets the path where backups are processed until they're stored.
|
573
459
|
# This must have enough free space to hold apx. 2 backups.
|
574
460
|
# May be an absolute path, or relative to the current directory or +root_path+.
|
575
|
-
#
|
576
461
|
|
577
462
|
tmp_path '../../tmp'
|
578
463
|
|
579
|
-
#
|
580
464
|
# Sets the path where backup stores persistent information.
|
581
465
|
# When Backup's Cycler is used, small YAML files are stored here.
|
582
466
|
# May be an absolute path, or relative to the current directory or +root_path+.
|
583
|
-
#
|
584
467
|
|
585
468
|
data_path '../../tmp/backup/data'
|
586
469
|
|
587
|
-
##
|
588
470
|
# Utilities
|
589
471
|
#
|
590
472
|
# If you need to use a utility other than the one Backup detects,
|
@@ -595,7 +477,6 @@ data_path '../../tmp/backup/data'
|
|
595
477
|
# redis_cli '/opt/redis/redis-cli'
|
596
478
|
# end
|
597
479
|
|
598
|
-
##
|
599
480
|
# Logging
|
600
481
|
#
|
601
482
|
# Logging options may be set on the command line, but certain settings
|
@@ -613,7 +494,6 @@ data_path '../../tmp/backup/data'
|
|
613
494
|
# to disable syslog and enable console output.
|
614
495
|
# backup perform --trigger my_backup --no-syslog --no-quiet
|
615
496
|
|
616
|
-
##
|
617
497
|
# Component Defaults
|
618
498
|
#
|
619
499
|
# Set default options to be applied to components in all models.
|
@@ -636,7 +516,6 @@ data_path '../../tmp/backup/data'
|
|
636
516
|
# mail.encryption = :starttls
|
637
517
|
# end
|
638
518
|
|
639
|
-
##
|
640
519
|
# Preconfigured Models
|
641
520
|
#
|
642
521
|
# Create custom models with preconfigured components.
|
@@ -662,19 +541,15 @@ data_path '../../tmp/backup/data'
|
|
662
541
|
# mail.to = 'john.smith@email.com'
|
663
542
|
# end
|
664
543
|
# end
|
665
|
-
|
666
|
-
|
667
|
-
git add: '-A'
|
668
|
-
git commit: "-m 'Add backup config'"
|
544
|
+
S
|
669
545
|
|
670
|
-
file 'lib/backup/models/backup.rb', <<-'
|
546
|
+
file 'lib/backup/models/backup.rb', <<-'S'
|
671
547
|
Model.new(:backup, 'Backup for the current RAILS_ENV') do
|
672
548
|
split_into_chunks_of 10
|
673
549
|
compress_with Gzip
|
674
550
|
|
675
551
|
database PostgreSQL do |db|
|
676
552
|
db.sudo_user = ENV['DATABASE_USERNAME']
|
677
|
-
|
678
553
|
# To dump all databases, set `db.name = :all` (or leave blank)
|
679
554
|
db.name = ENV['DATABASE_NAME']
|
680
555
|
db.username = ENV['DATABASE_USERNAME']
|
@@ -713,7 +588,6 @@ Model.new(:backup, 'Backup for the current RAILS_ENV') do
|
|
713
588
|
mail.on_success = false
|
714
589
|
#mail.on_warning = true
|
715
590
|
mail.on_failure = true
|
716
|
-
|
717
591
|
mail.from = ENV['ACTION_MAILER_DEFAULT_FROM']
|
718
592
|
mail.to = ENV['ACTION_MAILER_DEFAULT_TO']
|
719
593
|
mail.address = ENV['SMTP_ADDRESS']
|
@@ -725,18 +599,97 @@ Model.new(:backup, 'Backup for the current RAILS_ENV') do
|
|
725
599
|
mail.encryption = mail_encryption.to_sym
|
726
600
|
end
|
727
601
|
end
|
728
|
-
|
602
|
+
S
|
603
|
+
git_commit 'Add backup library'
|
604
|
+
end
|
605
|
+
|
606
|
+
def add_favicon_task
|
607
|
+
log_task __method__
|
608
|
+
|
609
|
+
file 'lib/tasks/orats/favicon.rake', <<-'S'
|
610
|
+
namespace :orats do
|
611
|
+
desc 'Create favicons from a single base png'
|
612
|
+
task :favicons do
|
613
|
+
require 'favicon_maker'
|
614
|
+
|
615
|
+
FaviconMaker.generate do
|
616
|
+
setup do
|
617
|
+
template_dir Rails.root.join('app', 'assets', 'favicon')
|
618
|
+
output_dir Rails.root.join('public')
|
619
|
+
end
|
729
620
|
|
730
|
-
|
731
|
-
git commit: "-m 'Add backup model'"
|
621
|
+
favicon_base_path = "#{template_dir}/favicon_base.png"
|
732
622
|
|
733
|
-
|
623
|
+
unless File.exist?(favicon_base_path)
|
624
|
+
puts
|
625
|
+
puts 'A base favicon could not be found, make sure one exists at:'
|
626
|
+
puts favicon_base_path
|
627
|
+
puts
|
628
|
+
exit 1
|
629
|
+
end
|
734
630
|
|
735
|
-
|
736
|
-
|
737
|
-
|
631
|
+
from File.basename(favicon_base_path) do
|
632
|
+
icon 'speeddial-160x160.png'
|
633
|
+
icon 'apple-touch-icon-228x228-precomposed.png'
|
634
|
+
icon 'apple-touch-icon-152x152-precomposed.png'
|
635
|
+
icon 'apple-touch-icon-144x144-precomposed.png'
|
636
|
+
icon 'apple-touch-icon-120x120-precomposed.png'
|
637
|
+
icon 'apple-touch-icon-114x114-precomposed.png'
|
638
|
+
icon 'apple-touch-icon-76x76-precomposed.png'
|
639
|
+
icon 'apple-touch-icon-72x72-precomposed.png'
|
640
|
+
icon 'apple-touch-icon-60x60-precomposed.png'
|
641
|
+
icon 'apple-touch-icon-57x57-precomposed.png'
|
642
|
+
icon 'favicon-196x196.png'
|
643
|
+
icon 'favicon-160x160.png'
|
644
|
+
icon 'favicon-96x96.png'
|
645
|
+
icon 'favicon-64x64.png'
|
646
|
+
icon 'favicon-32x32.png'
|
647
|
+
icon 'favicon-24x24.png'
|
648
|
+
icon 'favicon-16x16.png'
|
649
|
+
icon 'favicon.ico', size: '64x64,32x32,24x24,16x16'
|
650
|
+
end
|
738
651
|
|
739
|
-
|
652
|
+
each_icon do |filepath|
|
653
|
+
puts "Creating favicon @ #{filepath}"
|
654
|
+
end
|
655
|
+
end
|
656
|
+
end
|
657
|
+
end
|
658
|
+
S
|
659
|
+
git_commit 'Add a favicon generator task'
|
660
|
+
end
|
661
|
+
|
662
|
+
def add_backup_task
|
663
|
+
log_task __method__
|
664
|
+
|
665
|
+
file 'lib/tasks/orats/backup.rake', <<-'S'
|
666
|
+
namespace :orats do
|
667
|
+
desc 'Create a backup of your application for a specific environment'
|
668
|
+
task :backup do
|
669
|
+
if File.exist?('.env') && File.file?('.env')
|
670
|
+
require 'dotenv'
|
671
|
+
Dotenv.load
|
672
|
+
source_external_env = ''
|
673
|
+
else
|
674
|
+
source_external_env = '. /etc/default/app_name &&'
|
675
|
+
end
|
676
|
+
|
677
|
+
# hack'ish way to run the backup command with elevated privileges, it won't prompt for a password on the production
|
678
|
+
# server because passwordless sudo has been enabled if you use the ansible setup provided by orats
|
679
|
+
system 'sudo whoami'
|
680
|
+
|
681
|
+
system "#{source_external_env} backup perform -t backup -c '#{File.join('lib', 'backup', 'config.rb')}' --log-path='#{File.join('log')}'"
|
682
|
+
end
|
683
|
+
end
|
684
|
+
S
|
685
|
+
gsub_file 'lib/tasks/orats/backup.rake', 'app_name', app_name
|
686
|
+
git_commit 'Add an application backup task'
|
687
|
+
end
|
688
|
+
|
689
|
+
def add_helpers
|
690
|
+
log_task __method__
|
691
|
+
|
692
|
+
inject_into_file 'app/helpers/application_helper.rb', after: "ApplicationHelper\n" do <<-S
|
740
693
|
def title(page_title)
|
741
694
|
content_for(:title) { page_title }
|
742
695
|
end
|
@@ -773,7 +726,6 @@ inject_into_file 'app/helpers/application_helper.rb', after: "ApplicationHelper\
|
|
773
726
|
|
774
727
|
def humanize_boolean(input)
|
775
728
|
input ||= ''
|
776
|
-
|
777
729
|
case input.to_s.downcase
|
778
730
|
when 't', 'true'
|
779
731
|
'Yes'
|
@@ -789,21 +741,16 @@ inject_into_file 'app/helpers/application_helper.rb', after: "ApplicationHelper\
|
|
789
741
|
'danger'
|
790
742
|
end
|
791
743
|
end
|
792
|
-
|
744
|
+
S
|
745
|
+
end
|
746
|
+
git_commit 'Add various helpers'
|
793
747
|
end
|
794
748
|
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
# ----- Creating view files ---------------------------------------------------------------------------
|
749
|
+
def add_layout
|
750
|
+
log_task __method__
|
799
751
|
|
800
|
-
|
801
|
-
|
802
|
-
puts '-'*80, ''; sleep 0.25
|
803
|
-
|
804
|
-
run 'rm -f app/views/layouts/application.html.erb'
|
805
|
-
|
806
|
-
file 'app/views/layouts/application.html.erb', <<-HTML
|
752
|
+
run 'rm -f app/views/layouts/application.html.erb'
|
753
|
+
file 'app/views/layouts/application.html.erb', <<-S
|
807
754
|
<!doctype html>
|
808
755
|
<html lang="en">
|
809
756
|
<head>
|
@@ -813,7 +760,8 @@ file 'app/views/layouts/application.html.erb', <<-HTML
|
|
813
760
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
814
761
|
<meta name="description" content="<%= yield :meta_description %>" />
|
815
762
|
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
|
816
|
-
<%= javascript_include_tag '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',
|
763
|
+
<%= javascript_include_tag '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',
|
764
|
+
'application', 'data-turbolinks-track' => true %>
|
817
765
|
<%= csrf_meta_tags %>
|
818
766
|
<%= link_to_all_favicons %>
|
819
767
|
<!--[if lt IE 9]>
|
@@ -823,6 +771,7 @@ file 'app/views/layouts/application.html.erb', <<-HTML
|
|
823
771
|
<![endif]-->
|
824
772
|
<%= render 'layouts/google_analytics_snippet' %>
|
825
773
|
</head>
|
774
|
+
|
826
775
|
<body>
|
827
776
|
<%= render 'layouts/google_analytics_tracker' %>
|
828
777
|
<header>
|
@@ -833,26 +782,6 @@ file 'app/views/layouts/application.html.erb', <<-HTML
|
|
833
782
|
<div class="page-header">
|
834
783
|
<h1><%= yield :heading %></h1>
|
835
784
|
</div>
|
836
|
-
<h4>Using disqus</h4>
|
837
|
-
<p>Disqus related html and javascript will only be loaded when the short name is not empty.</p>
|
838
|
-
<ul>
|
839
|
-
<li>Set the <code>DISQUS_SHORT_NAME</code> env variable in <code>.env</code> and restart the server</li>
|
840
|
-
<li>
|
841
|
-
To output the main comments (place this where you want it):
|
842
|
-
<ul><li><%= render 'layouts/disqus_comments_snippet' %></li></ul>
|
843
|
-
</li>
|
844
|
-
<li>
|
845
|
-
<strong>(optional)</strong> The count snippet is already right before </body>
|
846
|
-
<ul>
|
847
|
-
<li>
|
848
|
-
<strong>(optional)</strong> Append #disqus_thread to the href attribute in your links.<br />
|
849
|
-
This will tell Disqus which links to look up and return the comment count.<br />
|
850
|
-
For example: <a href="http://foo.com/bar.html#disqus_thread">Link</a>.
|
851
|
-
</li>
|
852
|
-
</ul>
|
853
|
-
</li>
|
854
|
-
</ul>
|
855
|
-
|
856
785
|
<%= render 'layouts/flash' %>
|
857
786
|
<%= yield %>
|
858
787
|
</main>
|
@@ -867,12 +796,14 @@ file 'app/views/layouts/application.html.erb', <<-HTML
|
|
867
796
|
<%= render 'layouts/disqus_count_snippet' %>
|
868
797
|
</body>
|
869
798
|
</html>
|
870
|
-
|
799
|
+
S
|
800
|
+
git_commit 'Add layout'
|
801
|
+
end
|
871
802
|
|
872
|
-
|
873
|
-
|
803
|
+
def add_layout_partials
|
804
|
+
log_task __method__
|
874
805
|
|
875
|
-
file 'app/views/layouts/_flash.html.erb', <<-'
|
806
|
+
file 'app/views/layouts/_flash.html.erb', <<-'S'
|
876
807
|
<% flash.each do |key, msg| %>
|
877
808
|
<% unless key == :timedout %>
|
878
809
|
<%= content_tag :div, class: "alert alert-dismissable alert-#{key}" do -%>
|
@@ -883,12 +814,9 @@ file 'app/views/layouts/_flash.html.erb', <<-'HTML'
|
|
883
814
|
<% end %>
|
884
815
|
<% end %>
|
885
816
|
<% end %>
|
886
|
-
|
887
|
-
|
888
|
-
git add: '-A'
|
889
|
-
git commit: "-m 'Add flash message partial'"
|
817
|
+
S
|
890
818
|
|
891
|
-
file 'app/views/layouts/_navigation.html.erb', <<-
|
819
|
+
file 'app/views/layouts/_navigation.html.erb', <<-S
|
892
820
|
<nav class="navbar navbar-default">
|
893
821
|
<div class="container">
|
894
822
|
<div class="navbar-header">
|
@@ -898,7 +826,7 @@ file 'app/views/layouts/_navigation.html.erb', <<-HTML
|
|
898
826
|
<span class="icon-bar"></span>
|
899
827
|
<span class="icon-bar"></span>
|
900
828
|
</button>
|
901
|
-
<%= link_to '#{app_name}',
|
829
|
+
<%= link_to '#{app_name}', root_path, class: 'navbar-brand' %>
|
902
830
|
</div>
|
903
831
|
<div class="collapse navbar-collapse">
|
904
832
|
<ul class="nav navbar-nav">
|
@@ -907,33 +835,23 @@ file 'app/views/layouts/_navigation.html.erb', <<-HTML
|
|
907
835
|
</div>
|
908
836
|
</div>
|
909
837
|
</nav>
|
910
|
-
|
838
|
+
S
|
911
839
|
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
file 'app/views/layouts/_navigation_links.html.erb', <<-HTML
|
916
|
-
<li class="active">
|
917
|
-
<%= link_to 'Bar', '#' %>
|
840
|
+
file 'app/views/layouts/_navigation_links.html.erb', <<-S
|
841
|
+
<li>
|
842
|
+
<%= link_to 'Sidekiq dashboard', '/sidekiq' %>
|
918
843
|
</li>
|
919
|
-
|
920
|
-
|
921
|
-
git add: '-A'
|
922
|
-
git commit: "-m 'Add navigation links partial'"
|
844
|
+
S
|
923
845
|
|
924
|
-
file 'app/views/layouts/_footer.html.erb', <<-
|
846
|
+
file 'app/views/layouts/_footer.html.erb', <<-S
|
925
847
|
<p class="text-muted">© #{Time.now.year.to_s} #{app_name} - All rights reserved</p>
|
926
|
-
|
848
|
+
S
|
927
849
|
|
928
|
-
|
929
|
-
git commit: "-m 'Add footer partial'"
|
930
|
-
|
931
|
-
file 'app/views/layouts/_google_analytics_snippet.html.erb', <<-HTML
|
850
|
+
file 'app/views/layouts/_google_analytics_snippet.html.erb', <<-S
|
932
851
|
<script type="text/javascript">
|
933
852
|
var _gaq = _gaq || [];
|
934
853
|
<% if ENV['GOOGLE_ANALYTICS_UA'].present? %>
|
935
854
|
_gaq.push(['_setAccount', '<%= ENV["GOOGLE_ANALYTICS_UA"] %>']);
|
936
|
-
|
937
855
|
(function() {
|
938
856
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
939
857
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
@@ -941,41 +859,38 @@ file 'app/views/layouts/_google_analytics_snippet.html.erb', <<-HTML
|
|
941
859
|
})();
|
942
860
|
<% end %>
|
943
861
|
</script>
|
944
|
-
|
862
|
+
S
|
945
863
|
|
946
|
-
file 'app/views/layouts/_google_analytics_tracker.html.erb', <<-
|
864
|
+
file 'app/views/layouts/_google_analytics_tracker.html.erb', <<-S
|
947
865
|
<script type="text/javascript">
|
948
866
|
// This is added in the body to track both turbolinks and regular hits.
|
949
867
|
_gaq.push(['_trackPageview']);
|
950
868
|
</script>
|
951
|
-
|
952
|
-
|
953
|
-
git add: '-A'
|
954
|
-
git commit: "-m 'Add google analytics partials'"
|
869
|
+
S
|
955
870
|
|
956
|
-
file 'app/views/layouts/_disqus_comments_snippet.html.erb', <<-
|
871
|
+
file 'app/views/layouts/_disqus_comments_snippet.html.erb', <<-S
|
957
872
|
<% if ENV['DISQUS_SHORT_NAME'].present? %>
|
958
873
|
<div id="disqus_thread"></div>
|
959
874
|
<script type="text/javascript">
|
960
875
|
var disqus_shortname = '<%= ENV["DISQUS_SHORT_NAME"] %>';
|
961
|
-
|
962
876
|
(function() {
|
963
877
|
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
964
878
|
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
965
879
|
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
966
880
|
})();
|
967
881
|
</script>
|
968
|
-
<noscript>
|
882
|
+
<noscript>
|
883
|
+
Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>
|
884
|
+
</noscript>
|
969
885
|
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
970
886
|
<% end %>
|
971
|
-
|
887
|
+
S
|
972
888
|
|
973
|
-
file 'app/views/layouts/_disqus_count_snippet.html.erb', <<-
|
889
|
+
file 'app/views/layouts/_disqus_count_snippet.html.erb', <<-S
|
974
890
|
<% if ENV['DISQUS_SHORT_NAME'].present? %>
|
975
891
|
<div id="disqus_thread"></div>
|
976
892
|
<script type="text/javascript">
|
977
893
|
var disqus_shortname = '<%= ENV["DISQUS_SHORT_NAME"] %>';
|
978
|
-
|
979
894
|
(function () {
|
980
895
|
var s = document.createElement('script'); s.async = true;
|
981
896
|
s.type = 'text/javascript';
|
@@ -983,22 +898,17 @@ file 'app/views/layouts/_disqus_count_snippet.html.erb', <<-HTML
|
|
983
898
|
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
|
984
899
|
}());
|
985
900
|
<% end %>
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
git commit: "-m 'Add disqus partials'"
|
990
|
-
|
991
|
-
# ----- Creating public files -------------------------------------------------------------------------
|
992
|
-
|
993
|
-
puts
|
994
|
-
say_status 'public', 'Creating public files...', :yellow
|
995
|
-
puts '-'*80, ''; sleep 0.25
|
901
|
+
S
|
902
|
+
git_commit 'Add layout partials'
|
903
|
+
end
|
996
904
|
|
997
|
-
|
998
|
-
|
999
|
-
run 'rm -f public/500.html'
|
905
|
+
def add_http_error_pages
|
906
|
+
log_task __method__
|
1000
907
|
|
1001
|
-
|
908
|
+
run 'rm -f public/404.html'
|
909
|
+
run 'rm -f public/422.html'
|
910
|
+
run 'rm -f public/500.html'
|
911
|
+
file 'public/404.html', <<-S
|
1002
912
|
<!DOCTYPE html>
|
1003
913
|
<html>
|
1004
914
|
<head>
|
@@ -1012,9 +922,9 @@ file 'public/404.html', <<-HTML
|
|
1012
922
|
<h1>Error 404</h1>
|
1013
923
|
</body>
|
1014
924
|
</html>
|
1015
|
-
|
925
|
+
S
|
1016
926
|
|
1017
|
-
file 'public/422.html', <<-
|
927
|
+
file 'public/422.html', <<-S
|
1018
928
|
<!DOCTYPE html>
|
1019
929
|
<html>
|
1020
930
|
<head>
|
@@ -1028,9 +938,9 @@ file 'public/422.html', <<-HTML
|
|
1028
938
|
<h1>Error 422</h1>
|
1029
939
|
</body>
|
1030
940
|
</html>
|
1031
|
-
|
941
|
+
S
|
1032
942
|
|
1033
|
-
file 'public/500.html', <<-
|
943
|
+
file 'public/500.html', <<-S
|
1034
944
|
<!DOCTYPE html>
|
1035
945
|
<html>
|
1036
946
|
<head>
|
@@ -1044,47 +954,34 @@ file 'public/500.html', <<-HTML
|
|
1044
954
|
<h1>Error 500</h1>
|
1045
955
|
</body>
|
1046
956
|
</html>
|
1047
|
-
|
957
|
+
S
|
1048
958
|
|
1049
|
-
file 'public/502.html', <<-
|
959
|
+
file 'public/502.html', <<-S
|
1050
960
|
<!DOCTYPE html>
|
1051
961
|
<html>
|
1052
962
|
<head>
|
963
|
+
|
1053
964
|
<title>Error 502</title>
|
1054
965
|
<meta charset="utf-8" />
|
1055
966
|
<style>
|
1056
967
|
</style>
|
1057
968
|
</head>
|
1058
|
-
|
1059
969
|
<body>
|
1060
970
|
<h1>Error 502</h1>
|
1061
971
|
</body>
|
1062
972
|
</html>
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
git commit: "-m 'Add public 404, 422, 500 and 502 error pages'"
|
1067
|
-
|
1068
|
-
# ----- Modifying sass files --------------------------------------------------------------------------
|
1069
|
-
|
1070
|
-
puts
|
1071
|
-
say_status 'assets', 'Modifying sass files...', :yellow
|
1072
|
-
puts '-'*80, ''; sleep 0.25
|
1073
|
-
|
1074
|
-
run 'mv app/assets/stylesheets/application.css app/assets/stylesheets/application.css.scss'
|
1075
|
-
|
1076
|
-
git add: '-A'
|
1077
|
-
git commit: "-m 'Rename application.css to application.scss'"
|
1078
|
-
git add: '-u'
|
1079
|
-
|
1080
|
-
inject_into_file 'app/assets/stylesheets/application.css.scss',
|
1081
|
-
" *= require font-awesome\n",
|
1082
|
-
before: " *= require_self\n"
|
973
|
+
S
|
974
|
+
git_commit 'Add http status code pages'
|
975
|
+
end
|
1083
976
|
|
1084
|
-
|
1085
|
-
|
977
|
+
def update_sass
|
978
|
+
log_task __method__
|
1086
979
|
|
1087
|
-
|
980
|
+
run 'mv app/assets/stylesheets/application.css app/assets/stylesheets/application.css.scss'
|
981
|
+
inject_into_file 'app/assets/stylesheets/application.css.scss',
|
982
|
+
" *= require font-awesome\n",
|
983
|
+
before: " *= require_self\n"
|
984
|
+
append_file 'app/assets/stylesheets/application.css.scss' do <<-S
|
1088
985
|
|
1089
986
|
// Core variables and mixins
|
1090
987
|
@import "bootstrap/variables";
|
@@ -1146,7 +1043,6 @@ append_file 'app/assets/stylesheets/application.css.scss' do <<-SCSS
|
|
1146
1043
|
|
1147
1044
|
img {
|
1148
1045
|
@extend .img-responsive;
|
1149
|
-
margin: 0 auto;
|
1150
1046
|
}
|
1151
1047
|
|
1152
1048
|
.validation-error {
|
@@ -1154,28 +1050,21 @@ img {
|
|
1154
1050
|
color: $brand-danger;
|
1155
1051
|
font-size: $font-size-small;
|
1156
1052
|
}
|
1157
|
-
|
1053
|
+
S
|
1054
|
+
end
|
1055
|
+
git_commit 'Add font-awesome, bootstrap and a few default styles'
|
1158
1056
|
end
|
1159
1057
|
|
1160
|
-
|
1161
|
-
|
1162
|
-
puts
|
1163
|
-
say_status 'assets', 'Modifying javascript and coffeescript files...', :yellow
|
1164
|
-
puts '-'*80, ''; sleep 0.25
|
1165
|
-
|
1166
|
-
gsub_file 'app/assets/javascripts/application.js', "//= require jquery\n", ''
|
1058
|
+
def update_coffeescript
|
1059
|
+
log_task __method__
|
1167
1060
|
|
1168
|
-
|
1169
|
-
|
1061
|
+
gsub_file 'app/assets/javascripts/application.js', "//= require jquery\n", ''
|
1062
|
+
git_commit 'Remove jquery because it is loaded from a CDN'
|
1170
1063
|
|
1171
|
-
inject_into_file 'app/assets/javascripts/application.js',
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
git add: '-A'
|
1176
|
-
git commit: "-m 'Add jquery-turbolinks to the application.js file'"
|
1177
|
-
|
1178
|
-
inject_into_file 'app/assets/javascripts/application.js', before: "//= require_tree .\n" do <<-CODE
|
1064
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
1065
|
+
"//= require jquery.turbolinks\n",
|
1066
|
+
before: "//= require_tree .\n"
|
1067
|
+
inject_into_file 'app/assets/javascripts/application.js', before: "//= require_tree .\n" do <<-S
|
1179
1068
|
//= require bootstrap/affix
|
1180
1069
|
//= require bootstrap/alert
|
1181
1070
|
//= require bootstrap/button
|
@@ -1183,38 +1072,50 @@ inject_into_file 'app/assets/javascripts/application.js', before: "//= require_t
|
|
1183
1072
|
//= require bootstrap/collapse
|
1184
1073
|
//= require bootstrap/dropdown
|
1185
1074
|
//= require bootstrap/modal
|
1075
|
+
//= require bootstrap/tooltip
|
1186
1076
|
//= require bootstrap/popover
|
1187
1077
|
//= require bootstrap/scrollspy
|
1188
1078
|
//= require bootstrap/tab
|
1189
|
-
//= require bootstrap/tooltip
|
1190
1079
|
//= require bootstrap/transition
|
1191
|
-
|
1080
|
+
S
|
1081
|
+
end
|
1082
|
+
git_commit 'Add jquery.turbolinks and bootstrap'
|
1192
1083
|
end
|
1193
1084
|
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
# ----- Modifying gem file ----------------------------------------------------------------------------
|
1198
|
-
|
1199
|
-
puts
|
1200
|
-
say_status 'root', 'Copying Gemfile...', :yellow
|
1201
|
-
puts '-'*80, ''; sleep 0.25
|
1202
|
-
|
1203
|
-
run 'rm -f Gemfile'
|
1204
|
-
from_gem 'Gemfile', 'Gemfile'
|
1085
|
+
def remove_unused_files_from_git
|
1086
|
+
log_task __method__
|
1205
1087
|
|
1206
|
-
git add:
|
1207
|
-
|
1208
|
-
|
1209
|
-
# ----- Adding default favicon-------------------------------------------------------------------------
|
1210
|
-
|
1211
|
-
puts
|
1212
|
-
say_status 'assets', 'Copying default favicon...', :yellow
|
1213
|
-
puts '-'*80, ''; sleep 0.25
|
1088
|
+
git add: '-u'
|
1089
|
+
git_commit 'Remove unused files'
|
1090
|
+
end
|
1214
1091
|
|
1215
|
-
|
1216
|
-
run 'mkdir -p app/assets/favicon'
|
1217
|
-
run "cp #{base_path}/app/assets/favicon/favicon_base.png app/assets/favicon/favicon_base.png"
|
1092
|
+
# ---
|
1218
1093
|
|
1219
|
-
|
1220
|
-
|
1094
|
+
initial_git_commit
|
1095
|
+
update_gitignore
|
1096
|
+
copy_gemfile
|
1097
|
+
copy_base_favicon
|
1098
|
+
add_dotenv
|
1099
|
+
add_procfile
|
1100
|
+
update_app_secrets
|
1101
|
+
update_app_config
|
1102
|
+
update_database_config
|
1103
|
+
add_puma_config
|
1104
|
+
add_sidekiq_config
|
1105
|
+
add_sitemap_config
|
1106
|
+
add_whenever_config
|
1107
|
+
add_sidekiq_initializer
|
1108
|
+
add_mini_profiler_initializer
|
1109
|
+
add_staging_environment
|
1110
|
+
update_production_environment
|
1111
|
+
update_routes
|
1112
|
+
add_backup_lib
|
1113
|
+
add_favicon_task
|
1114
|
+
add_backup_task
|
1115
|
+
add_helpers
|
1116
|
+
add_layout
|
1117
|
+
add_layout_partials
|
1118
|
+
add_http_error_pages
|
1119
|
+
update_sass
|
1120
|
+
update_coffeescript
|
1121
|
+
remove_unused_files_from_git
|