badger-rails 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/BadgerGit.png +0 -0
  2. data/COPYING +674 -0
  3. data/LICENSING +30 -0
  4. data/Manifest +112 -0
  5. data/README.md +80 -0
  6. data/Rakefile +36 -0
  7. data/badger-rails.gemspec +34 -0
  8. data/bin/badger +486 -0
  9. data/lib/badger/Capfile +1 -0
  10. data/lib/badger/config/deploy.rb +211 -0
  11. data/lib/badger/config/rails-app.yml +6 -0
  12. data/lib/badger/config/rails-app.yml.bk +6 -0
  13. data/lib/badger/core/claws/app.claw +112 -0
  14. data/lib/badger/core/claws/db-app.claw +59 -0
  15. data/lib/badger/core/claws/rails-app.claw +125 -0
  16. data/lib/badger/core/files/badger/info +0 -0
  17. data/lib/badger/core/files/cap/Capfile +4 -0
  18. data/lib/badger/core/files/cap/deploy/production-app.rb +139 -0
  19. data/lib/badger/core/files/cap/deploy/production.rb +136 -0
  20. data/lib/badger/core/files/cap/deploy/staging-app.rb +139 -0
  21. data/lib/badger/core/files/cap/deploy/staging.rb +134 -0
  22. data/lib/badger/core/files/cap/deploy.rb +6 -0
  23. data/lib/badger/core/files/git/git +0 -0
  24. data/lib/badger/core/files/god/angel/resque-dev.god +54 -0
  25. data/lib/badger/core/files/god/angel/resque-stg.god +54 -0
  26. data/lib/badger/core/files/god/angel/resque.god +55 -0
  27. data/lib/badger/core/files/god/angel/unicorn-stg.god +62 -0
  28. data/lib/badger/core/files/god/angel/unicorn.god +62 -0
  29. data/lib/badger/core/files/god/god +108 -0
  30. data/lib/badger/core/files/god/unicorn-stg.rb +70 -0
  31. data/lib/badger/core/files/god/unicorn.rb +70 -0
  32. data/lib/badger/core/files/logrotate/logrotate.conf +23 -0
  33. data/lib/badger/core/files/logrotate/logrotate.cron +8 -0
  34. data/lib/badger/core/files/mysql/database.yml.bk +18 -0
  35. data/lib/badger/core/files/mysql/db_stats +0 -0
  36. data/lib/badger/core/files/mysql/my.cnf +11 -0
  37. data/lib/badger/core/files/nginx/nginx +106 -0
  38. data/lib/badger/core/files/nginx/nginx.conf +30 -0
  39. data/lib/badger/core/files/nginx/sites/port443.btl +42 -0
  40. data/lib/badger/core/files/nginx/sites/port80.btl +39 -0
  41. data/lib/badger/core/files/nginx/sites/production-web +117 -0
  42. data/lib/badger/core/files/nginx/sites/staging-web +41 -0
  43. data/lib/badger/core/files/postfix/main.cf +678 -0
  44. data/lib/badger/core/files/postfix/master.cf +81 -0
  45. data/lib/badger/core/files/redis/redis-server +59 -0
  46. data/lib/badger/core/files/redis/redis.conf +444 -0
  47. data/lib/badger/core/files/resque/resque.rb +5 -0
  48. data/lib/badger/core/files/resque/resque.yml +19 -0
  49. data/lib/badger/core/files/resque/resque_web.rb +2 -0
  50. data/lib/badger/core/files/ssh/authorized_keys +0 -0
  51. data/lib/badger/core/functions +174 -0
  52. data/lib/badger/core/scripts/app_info +40 -0
  53. data/lib/badger/core/scripts/app_scale +15 -0
  54. data/lib/badger/core/scripts/remove_app +25 -0
  55. data/lib/badger/core/scripts/remove_app_db +30 -0
  56. data/lib/badger/core/scripts/remove_gems +2 -0
  57. data/lib/badger/core/teeth/automake.th +9 -0
  58. data/lib/badger/core/teeth/badger.th +27 -0
  59. data/lib/badger/core/teeth/bison.th +20 -0
  60. data/lib/badger/core/teeth/bundler.th +4 -0
  61. data/lib/badger/core/teeth/capistrano-ext.th +37 -0
  62. data/lib/badger/core/teeth/chkconfig.th +4 -0
  63. data/lib/badger/core/teeth/curl.th +24 -0
  64. data/lib/badger/core/teeth/faac.th +11 -0
  65. data/lib/badger/core/teeth/ffmpeg.th +28 -0
  66. data/lib/badger/core/teeth/firewall.th +70 -0
  67. data/lib/badger/core/teeth/gcc-c++.th +9 -0
  68. data/lib/badger/core/teeth/gcc.th +9 -0
  69. data/lib/badger/core/teeth/git.th +23 -0
  70. data/lib/badger/core/teeth/god.th +17 -0
  71. data/lib/badger/core/teeth/lame.th +9 -0
  72. data/lib/badger/core/teeth/libffi.th +4 -0
  73. data/lib/badger/core/teeth/libid3tag.th +10 -0
  74. data/lib/badger/core/teeth/libmad.th +11 -0
  75. data/lib/badger/core/teeth/libogg.th +9 -0
  76. data/lib/badger/core/teeth/libtool.th +9 -0
  77. data/lib/badger/core/teeth/libxml2.th +19 -0
  78. data/lib/badger/core/teeth/libxslt.th +19 -0
  79. data/lib/badger/core/teeth/libyaml.th +19 -0
  80. data/lib/badger/core/teeth/logrotate.th +19 -0
  81. data/lib/badger/core/teeth/madplay.th +10 -0
  82. data/lib/badger/core/teeth/make.th +9 -0
  83. data/lib/badger/core/teeth/mysql-config.th +40 -0
  84. data/lib/badger/core/teeth/mysql-server.th +16 -0
  85. data/lib/badger/core/teeth/mysql.th +14 -0
  86. data/lib/badger/core/teeth/nginx.th +56 -0
  87. data/lib/badger/core/teeth/ntp.th +15 -0
  88. data/lib/badger/core/teeth/openssl.th +19 -0
  89. data/lib/badger/core/teeth/pcre.th +9 -0
  90. data/lib/badger/core/teeth/plugins.th +14 -0
  91. data/lib/badger/core/teeth/postfix.th +11 -0
  92. data/lib/badger/core/teeth/pwgen.th +9 -0
  93. data/lib/badger/core/teeth/rake.th +12 -0
  94. data/lib/badger/core/teeth/readline.th +19 -0
  95. data/lib/badger/core/teeth/redis.th +18 -0
  96. data/lib/badger/core/teeth/resque.th +12 -0
  97. data/lib/badger/core/teeth/ruby.th +52 -0
  98. data/lib/badger/core/teeth/rubygems.th +17 -0
  99. data/lib/badger/core/teeth/san_juan.th +4 -0
  100. data/lib/badger/core/teeth/sox.th +12 -0
  101. data/lib/badger/core/teeth/speex.th +12 -0
  102. data/lib/badger/core/teeth/sqlite3.th +14 -0
  103. data/lib/badger/core/teeth/ssh_keys.th +10 -0
  104. data/lib/badger/core/teeth/sshpass.th +9 -0
  105. data/lib/badger/core/teeth/sudo.th +9 -0
  106. data/lib/badger/core/teeth/syslog-ng.th +16 -0
  107. data/lib/badger/core/teeth/sysv-rc-conf.th +4 -0
  108. data/lib/badger/core/teeth/x264.th +11 -0
  109. data/lib/badger/core/teeth/xvid.th +11 -0
  110. data/lib/badger/core/teeth/yasm.th +11 -0
  111. data/lib/badger/core/teeth/zlib.th +9 -0
  112. data/lib/core.rb +313 -0
  113. data/lib/errors.rb +202 -0
  114. metadata +297 -0
data/bin/badger ADDED
@@ -0,0 +1,486 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ #--------------------------------#
4
+ #--- Author Nathan Kelley -------#
5
+ #--- Company Curiousminds -------#
6
+ #--- Licensing@curiousminds.com -#
7
+ #--------------------------------#
8
+ #
9
+ require 'fileutils'
10
+ require 'rubygems'
11
+ require 'yaml'
12
+ require 'errors'
13
+ require 'core'
14
+
15
+ @errors = Errors.new
16
+
17
+ def remove_app(rails_root)
18
+ spec = Gem::Specification.find_by_name("badger-rails")
19
+ badger_root = spec.gem_dir + "/lib/"
20
+ FileUtils.cp(Dir.pwd + "/badger.yml", badger_root + "badger/config/rails-app.yml")
21
+ Dir.chdir(badger_root + "badger/")
22
+ while true
23
+ puts <<EOF
24
+
25
+ This will remove the #{ARGV[1]} project from the server.
26
+ Do you wish to remove the database as well? [ y/n ]
27
+
28
+ EOF
29
+ response = STDIN.gets.chomp
30
+ if response == "y"
31
+ exists = `cap #{ARGV[1]} exists`
32
+ if not exists.chomp == "true"
33
+ @errors.errors('rails')
34
+ exit
35
+ end
36
+ `cap #{ARGV[1]} removedb`
37
+ Dir.chdir(rails_root)
38
+ `git remote rm badger`
39
+ break
40
+ elsif response == "n"
41
+ exists = `cap #{ARGV[1]} exists`
42
+ if not exists.chomp == "true"
43
+ @errors.errors('rails')
44
+ exit
45
+ end
46
+ `cap #{ARGV[1]} remove`
47
+ Dir.chdir(rails_root)
48
+ `git remote rm badger`
49
+ break
50
+ end
51
+ end
52
+ end
53
+
54
+ unless ARGV[0].nil?
55
+ argv=ARGV[0].downcase
56
+ end
57
+
58
+ if argv.tr('^A-Za-z', '') == "app"
59
+ if ARGV[1] == "build"
60
+ core_app = Core.new
61
+ core_app.ensure_rails_root
62
+ core_app.ensure_external_db
63
+ core_app.create(argv)
64
+ exit
65
+ elsif ARGV[1] == "scale"
66
+ if ARGV[2].nil? or ARGV[2].to_i == "0"
67
+ @errors.errors('scale int')
68
+ exit
69
+ else
70
+ core_scale = Core.new
71
+ core_scale.ensure_rails_root
72
+ core_scale.scale ARGV[2], ARGV[0]
73
+ exit
74
+ end
75
+ else
76
+ if ARGV[1][0].downcase == "s"
77
+ @errors.errors('scale')
78
+ exit
79
+ elsif ARGV[1][0].downcase == "b"
80
+ @errors.errors('app build')
81
+ exit
82
+ else
83
+ @errors.errors('app usage')
84
+ exit
85
+ end
86
+ end
87
+ end
88
+
89
+ case argv
90
+ when "info"
91
+ core_info = Core.new
92
+ core_info.ensure_rails_root
93
+ core_info.info
94
+
95
+ when "create"
96
+ if ARGV[1].nil?
97
+ @errors.errors('name')
98
+ else
99
+ if ARGV[1] == "db" or ARGV[1][0..2] == "app"
100
+ @errors.errors('specific name')
101
+ exit
102
+ else
103
+ core_create = Core.new
104
+ core_create.ensure_rails_root
105
+ core_create.create
106
+ end
107
+ end
108
+
109
+ when "update"
110
+ if ARGV[1].nil?
111
+ @errors.errors('name')
112
+ else
113
+ core_update = Core.new
114
+ core_update.ensure_rails_root
115
+ core_update.update
116
+ end
117
+
118
+ when "db"
119
+ if not ARGV[1] == "build"
120
+ @errors.errors('db build')
121
+ else
122
+ core_db = Core.new
123
+ core_db.ensure_rails_root
124
+ core_db.db
125
+ end
126
+
127
+ when "gen", "g", "generate"
128
+ case ARGV[1].downcase
129
+ when "ruby-plugin"
130
+ config_dir = Dir.exists?("config/")
131
+ if config_dir
132
+ new_config_dir = Dir.pwd
133
+ if not File.exists?("lib/badger_plugin.rb")
134
+ badger_plugin = <<EOF
135
+ module BadgerPluginMethods
136
+
137
+ def initialize()
138
+ #code for pre-rails migration
139
+ end
140
+
141
+ end
142
+
143
+ class BadgerPlugin
144
+ include BadgerPluginMethods
145
+ end
146
+ EOF
147
+ `echo '#{badger_plugin}' >> lib/badger_plugin.rb`
148
+ puts <<EOF
149
+
150
+ lib/badger_plugin.rb
151
+
152
+ EOF
153
+ else
154
+ @errors.errors('plugins')
155
+ end
156
+ else
157
+ while not Dir.pwd == "/"
158
+ if Dir.exists?("config/")
159
+ break
160
+ else
161
+ Dir.chdir("..")
162
+ end
163
+ end
164
+ if Dir.pwd == "/"
165
+ @errors.errors('rails root')
166
+ else
167
+ config_dir = Dir.pwd
168
+ if not File.exists?("lib/badger_plugin.rb")
169
+ badger_plugin = <<EOF
170
+ module BadgerPluginMethods
171
+
172
+ def initialize()
173
+ #code for pre-rails migration
174
+ end
175
+
176
+ end
177
+
178
+ class BadgerPlugin
179
+ include BadgerPluginMethods
180
+ end
181
+ EOF
182
+ `echo '#{badger_plugin}' >> lib/badger_plugin.rb`
183
+ puts <<EOF
184
+
185
+ lib/badger_plugin.rb
186
+
187
+ EOF
188
+ else
189
+ @errors.errors('plugins')
190
+ end
191
+ end
192
+ end
193
+
194
+ when "plugins"
195
+ config_dir = Dir.exists?("config/")
196
+ if config_dir
197
+ new_config_dir = Dir.pwd
198
+ if not Dir.exists?("lib/badger/")
199
+ `mkdir -p lib/badger/teeth/;
200
+ touch lib/badger/before;
201
+ touch lib/badger/dev;
202
+ touch lib/badger/after;
203
+ touch lib/badger/teeth/fail2ban.th`
204
+ fail_2ban = <<EOF
205
+ #add_fail2ban() {
206
+ # fail2ban-client status && return 0
207
+ # yum -y install fail2ban
208
+ # fail2ban-client start
209
+ #}
210
+ EOF
211
+ `echo '#{fail_2ban}' >> lib/badger/teeth/fail2ban.th`
212
+ `echo '#add_fail2ban' >> lib/badger/after`
213
+ puts <<EOF
214
+ lib/badger
215
+ lib/badger/teeth/
216
+ lib/badger/after
217
+ lib/badger/before
218
+ lib/badger/dev
219
+ lib/badger/teeth/fail2ban.th
220
+ EOF
221
+ else
222
+ @errors.errors('plugins')
223
+ end
224
+ else
225
+ while not Dir.pwd == "/"
226
+ if Dir.exists?("config/")
227
+ break
228
+ else
229
+ Dir.chdir("..")
230
+ end
231
+ end
232
+ if Dir.pwd == "/"
233
+ @errors.errors('rails root')
234
+ else
235
+ config_dir = Dir.pwd
236
+ if not Dir.exists?("lib/badger/")
237
+ `mkdir -p lib/badger/teeth/;
238
+ touch lib/badger/before;
239
+ touch lib/badger/dev;
240
+ touch lib/badger/after;
241
+ touch lib/badger/teeth/fail2ban.th`
242
+ fail_2ban = <<EOF
243
+ #add_fail2ban() {
244
+ # fail2ban-client status && return 0
245
+ # yum -y install fail2ban
246
+ # fail2ban-client start
247
+ #}
248
+ EOF
249
+ `echo '#{fail_2ban}' >> lib/badger/teeth/fail2ban.th`
250
+ `echo '#add_fail2ban' >> lib/badger/after`
251
+ puts <<EOF
252
+ lib/badger
253
+ lib/badger/teeth/
254
+ lib/badger/after
255
+ lib/badger/before
256
+ lib/badger/dev
257
+ lib/badger/teeth/fail2ban.th
258
+ EOF
259
+ else
260
+ @errors.errors('plugins')
261
+ end
262
+ end
263
+ end
264
+
265
+ when "yml"
266
+ config_dir = Dir.exists?("config/")
267
+ if config_dir
268
+ new_config_dir = Dir.pwd
269
+ if not File.exists?("config/badger.yml")
270
+ `touch config/badger.yml`
271
+ badger_yml = <<EOF
272
+ username: "typically root"
273
+ password: "server password"
274
+ domain: "domain or ip of the server"
275
+ port: "ssh port usually port 22"
276
+ redis: false #true will host redis locally
277
+ environment: "production" # or "staging", development and testing are excluded.
278
+ EOF
279
+ `echo '#{badger_yml}' >> config/badger.yml`
280
+ puts "config/badger.yml"
281
+ else
282
+ @errors.errors('badger yaml')
283
+ end
284
+ else
285
+ while not Dir.pwd == "/"
286
+ if Dir.exists?("config/")
287
+ break
288
+ else
289
+ Dir.chdir("..")
290
+ end
291
+ end
292
+ if Dir.pwd == "/"
293
+ @errors.errors('rails root')
294
+ else
295
+ config_dir = Dir.pwd
296
+ if not File.exists?("config/badger.yml")
297
+ `touch config/badger.yml`
298
+ badger_yml = <<EOF
299
+ username: "typically root"
300
+ password: "server password"
301
+ domain: "domain or ip of the server"
302
+ port: "ssh port usually port 22"
303
+ redis: false #true will host redis locally
304
+ environment: "production" # or "staging", development and testing are excluded.
305
+ EOF
306
+ `echo '#{badger_yml}' >> config/badger.yml`
307
+ puts "config/badger.yml"
308
+ else
309
+ @errors.errors('badger yaml')
310
+ end
311
+ end
312
+ end
313
+ else
314
+ if ARGV[1][0].downcase == "p"
315
+ @errors.errors('generate plugins')
316
+ elsif ARGV[1][0].downcase == "y"
317
+ @errors.errors('generate yaml')
318
+ else
319
+ @errors.errors('generate')
320
+ end
321
+ end
322
+
323
+ when "remove"
324
+ if ARGV[1].nil?
325
+ @errors.errors('name')
326
+ else
327
+ config_dir = Dir.exists?("config/")
328
+ if config_dir
329
+ new_config_dir = Dir.pwd
330
+ Dir.chdir("config/")
331
+ remove_app(new_config_dir)
332
+ else
333
+ while not Dir.pwd == "/"
334
+ if Dir.exists?("config/")
335
+ break
336
+ else
337
+ Dir.chdir("..")
338
+ end
339
+ end
340
+ if Dir.pwd == "/"
341
+ @errors.errors('rails root')
342
+ else
343
+ config_dir = Dir.pwd
344
+ Dir.chdir("config/")
345
+ remove_app(config_dir)
346
+ end
347
+ end
348
+ end
349
+
350
+ when "rake"
351
+ core_rake = Core.new
352
+ core_rake.ensure_rails_root
353
+ core_rake.rake_tasks
354
+
355
+ when "logs"
356
+ core_logs = Core.new
357
+ core_logs.ensure_rails_root
358
+ core_logs.badger_logs
359
+
360
+ when "gemset"
361
+ case ARGV[1]
362
+ when "clear"
363
+ spec = Gem::Specification.find_by_name("badger-rails")
364
+ badger_root = spec.gem_dir + "/lib/"
365
+ Dir.chdir(badger_root + "badger/")
366
+ while true
367
+ puts <<EOF
368
+
369
+ Are you sure you want to remove all gems from the server? [ y/n ]
370
+
371
+ EOF
372
+ response = STDIN.gets.chomp
373
+ if response == "y"
374
+ `cap rails-app gemset_clear`
375
+ break
376
+ elsif response == "n"
377
+ exit
378
+ end
379
+ end
380
+ else
381
+ @errors.errors('gemset clear')
382
+ end
383
+
384
+ when "help", "-h", "--help"
385
+ @errors.errors('usage')
386
+ exit
387
+
388
+ when "deploy"
389
+ config_dir = Dir.exists?("config/")
390
+ if config_dir
391
+ new_config_dir = Dir.pwd
392
+ if `cat Gemfile.lock | grep therubyracer` == ""
393
+ @errors.errors('rubyracer')
394
+ exit
395
+ elsif `cat Gemfile.lock | grep mysql2` == ""
396
+ @errors.errors('mysql2')
397
+ exit
398
+ elsif `cat Gemfile.lock | grep unicorn` == ""
399
+ @errors.errors('unicorn')
400
+ exit
401
+ end
402
+ spec = Gem::Specification.find_by_name("badger-rails")
403
+ badger_root = spec.gem_dir + "/lib/"
404
+ if Dir.exists?("lib/badger/") and File.exists?("lib/badger/before") and File.exists?("lib/badger/after") and Dir.exists?("lib/badger/teeth/")
405
+ `cp -rf lib/badger #{badger_root}badger/core/scripts/badger`
406
+ else
407
+ `rm -rf #{badger_root}badger/core/scripts/badger`
408
+ end
409
+ Dir.chdir("config/")
410
+ FileUtils.cp(Dir.pwd + "/badger.yml", badger_root + "badger/config/rails-app.yml")
411
+ Dir.chdir(badger_root + "badger/")
412
+ if File.exists?("#{Dir.home}/.ssh/id_rsa.pub")
413
+ `cap rails-app deploy`
414
+ unless ARGV[1].nil?
415
+ if ARGV[1].downcase == "--with-workers"
416
+ Dir.chdir(new_config_dir)
417
+ core_app = Core.new
418
+ core_app.ensure_rails_root
419
+ core_app.ensure_external_db
420
+ badger_yml = core_app.yml
421
+ badger_yml.keys.each do |k|
422
+ if k.tr('^A-Za-z', '') == "app"
423
+ core_app.create(k)
424
+ end
425
+ end
426
+ exit
427
+ end
428
+ end
429
+ else
430
+ @errors.errors('ssh')
431
+ end
432
+ else
433
+ while not Dir.pwd == "/"
434
+ if Dir.exists?("config/")
435
+ break
436
+ else
437
+ Dir.chdir("..")
438
+ end
439
+ end
440
+ if Dir.pwd == "/"
441
+ @errors.errors('rails root')
442
+ else
443
+ config_dir = Dir.pwd
444
+ if `cat Gemfile.lock | grep therubyracer` == ""
445
+ @errors.errors('rubyracer')
446
+ exit
447
+ elsif `cat Gemfile.lock | grep mysql2` == ""
448
+ @errors.errors('mysql2')
449
+ exit
450
+ elsif `cat Gemfile.lock | grep unicorn` == ""
451
+ @errors.errors('unicorn')
452
+ exit
453
+ end
454
+ spec = Gem::Specification.find_by_name("badger-rails")
455
+ badger_root = spec.gem_dir + "/lib/"
456
+ if Dir.exists?("lib/badger/")
457
+ `cp -rf lib/badger #{badger_root}badger/core/scripts/badger`
458
+ end
459
+ Dir.chdir("config/")
460
+ FileUtils.cp(Dir.pwd + "/badger.yml", badger_root + "badger/config/rails-app.yml")
461
+ Dir.chdir(badger_root + "badger/")
462
+ if File.exists?("#{Dir.home}/.ssh/id_rsa.pub")
463
+ `cap rails-app deploy`
464
+ unless ARGV[1].nil?
465
+ if ARGV[1].downcase == "--with-workers"
466
+ Dir.chdir(config_dir)
467
+ core_app = Core.new
468
+ core_app.ensure_rails_root
469
+ core_app.ensure_external_db
470
+ badger_yml = core_app.yml
471
+ badger_yml.keys.each do |k|
472
+ if k.tr('^A-Za-z', '') == "app"
473
+ core_app.create(k)
474
+ end
475
+ end
476
+ exit
477
+ end
478
+ end
479
+ else
480
+ @errors.errors('ssh')
481
+ end
482
+ end
483
+ end
484
+ else
485
+ @errors.errors('usage')
486
+ end
@@ -0,0 +1 @@
1
+ load 'config/deploy.rb'
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'yaml'
4
+
5
+ def remote_file_exists?(full_path)
6
+ 'true' == capture("if [ -d #{full_path} ]; then echo 'true'; fi").strip
7
+ end
8
+
9
+ def remote_directory_empty?(full_path)
10
+ 'true' == capture('[ "$(ls -A /opt/git/)" ] && echo "false" || echo "true"').strip
11
+ end
12
+
13
+ def check_local_db(teh_yml)
14
+ if teh_yml['local_db'] == nil or teh_yml['local_db'] == true
15
+ puts
16
+ puts "Worker servers cannot be deployed with a local project database."
17
+ puts "Please use an exteral database."
18
+ puts
19
+ exit
20
+ end
21
+ end
22
+
23
+ yml = YAML.load_file "config/rails-app.yml"
24
+ set :user, yml['username']
25
+ set :password, yml['password']
26
+ set :domain, yml['domain']
27
+ set :port, yml['port']
28
+ set :server, yml['server']
29
+ set :environment, yml['environment']
30
+
31
+ role :web, domain
32
+
33
+ desc "host"
34
+ task ARGV[0], :roles => :web do
35
+ case ARGV[1]
36
+ when "db_setup", "db_sync", "db_deploy"
37
+ roles[:app].clear
38
+ roles[:web].clear
39
+ set :user, yml['db']['username']
40
+ set :password, yml['db']['password']
41
+ set :domain, yml['db']['domain']
42
+ set :port, yml['db']['port']
43
+ role :db, domain
44
+ when "app_setup", "app_sync", "app_deploy", "scale"
45
+ roles[:app].clear
46
+ roles[:web].clear
47
+ set :user, yml[ARGV[0]]['username']
48
+ set :password, yml[ARGV[0]]['password']
49
+ set :domain, yml[ARGV[0]]['domain']
50
+ set :port, yml[ARGV[0]]['port']
51
+ role :app, domain
52
+ end
53
+ end
54
+
55
+ desc "info"
56
+ task :info, roles => :web do
57
+ run "cd /etc/badger/core/scripts/; chmod +x app_info; ./app_info"
58
+ end
59
+
60
+ desc "scale"
61
+ task :scale, roles => :app do
62
+ run "cd /etc/badger/core/scripts/; chmod +x app_scale; ./app_scale #{workers} #{yml['environment']}"
63
+ end
64
+
65
+ desc "exists"
66
+ task :exists, roles => :web do
67
+ if remote_file_exists?("/opt/git/#{ARGV[0]}.git")
68
+ puts "true"
69
+ end
70
+ end
71
+
72
+ desc "createExists"
73
+ task :createExists, roles => :web do
74
+ if remote_directory_empty?("/opt/git/#{ARGV[0]}.git")
75
+ puts "false"
76
+ else
77
+ puts "true"
78
+ end
79
+ end
80
+
81
+ desc "sync"
82
+ task :sync, :roles => :web do
83
+ upload "../badger/core", "/etc/badger/", :via => :scp, :recursive => :true
84
+ end
85
+
86
+ desc "db_sync"
87
+ task :db_sync, :roles => :db do
88
+ upload "../badger/core", "/etc/badger/", :via => :scp, :recursive => :true
89
+ end
90
+
91
+ desc "app_sync"
92
+ task :app_sync, :roles => :app do
93
+ upload "../badger/core", "/etc/badger/", :via => :scp, :recursive => :true
94
+ end
95
+
96
+ desc "setup"
97
+ task :setup, :roles => :web do
98
+ `cat ~/.ssh/id_rsa.pub >> core/files/ssh/authorized_keys`
99
+ run <<EOF
100
+ mkdir -p /etc/badger/core;
101
+ [ "$(cat /etc/issue | grep CentOS)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
102
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y repolist;
103
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y install git && yum -y update git;
104
+ [ "$(cat /etc/issue | grep Red)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
105
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y repolist;
106
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y install git && yum -y update git;
107
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y update git;
108
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get update;
109
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get -y install git-core;
110
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get update;
111
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get -y install git-core;
112
+ EOF
113
+ end
114
+
115
+ desc "db_setup"
116
+ task :db_setup, :roles => :db do
117
+ `cat ~/.ssh/id_rsa.pub >> core/files/ssh/authorized_keys`
118
+ run <<EOF
119
+ mkdir -p /etc/badger/core;
120
+ [ "$(cat /etc/issue | grep CentOS)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
121
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y repolist;
122
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y install git && yum -y update git;
123
+ [ "$(cat /etc/issue | grep Red)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
124
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y repolist;
125
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y install git && yum -y update git;
126
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y update git;
127
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get update;
128
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get -y install git-core;
129
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get update;
130
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get -y install git-core;
131
+ EOF
132
+ end
133
+
134
+ desc "app_setup"
135
+ task :app_setup, :roles => :app do
136
+ `cat ~/.ssh/id_rsa.pub >> core/files/ssh/authorized_keys`
137
+ run <<EOF
138
+ mkdir -p /etc/badger/core;
139
+ [ "$(cat /etc/issue | grep CentOS)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
140
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y repolist;
141
+ [ "$(cat /etc/issue | grep CentOS)" ] && yum -y install git && yum -y update git;
142
+ [ "$(cat /etc/issue | grep Red)" ] && rpm -Uvh https://github.com/downloads/curiousminds/packages/epel-release-6-5.noarch.rpm;
143
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y repolist;
144
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y install git && yum -y update git;
145
+ [ "$(cat /etc/issue | grep Red)" ] && yum -y update git;
146
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get update;
147
+ [ "$(cat /etc/issue | grep Ubuntu)" ] && apt-get -y install git-core;
148
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get update;
149
+ [ "$(cat /etc/issue | grep Debian)" ] && apt-get -y install git-core;
150
+ EOF
151
+ end
152
+
153
+ desc "db_deploy"
154
+ task :db_deploy, :roles => :db do
155
+ run "chmod +x /etc/badger/core/claws/#{ARGV[0]}.claw; /etc/badger/core/claws/./#{ARGV[0]}.claw"
156
+ end
157
+
158
+ desc "app_deploy"
159
+ task :app_deploy, :roles => :app do
160
+ check_local_db(yml)
161
+ run "chmod +x /etc/badger/core/claws/app.claw; /etc/badger/core/claws/./app.claw"
162
+ end
163
+
164
+ desc "deploy"
165
+ task :deploy, :roles => :web do
166
+ if Dir.exists?("../badger/core/scripts/badger/")
167
+ upload "../badger/core/scripts/badger", "/etc/badger/core/scripts/", :via => :scp, :recursive => :true
168
+ end
169
+ run "chmod +x /etc/badger/core/claws/#{ARGV[0]}.claw; /etc/badger/core/claws/./#{ARGV[0]}.claw"
170
+ end
171
+
172
+ desc "gemset_clear"
173
+ task :gemset_clear, :roles => :web do
174
+ run "cd /etc/badger/core/scripts/; chmod +x *; ./remove_gems"
175
+ end
176
+
177
+ desc "git"
178
+ task :git, :roles => :web do
179
+ ssh = `cat ~/.ssh/id_rsa.pub`
180
+ run "groupadd git; useradd -m git -g git && mkdir -p /home/git/.ssh/ && touch /home/git/.ssh/authorized_keys; chown git /home/git/.ssh; echo #{ssh} >> /home/git/.ssh/authorized_keys"
181
+ run "mkdir -p /opt/git/#{ARGV[0]}.git; cd /opt/git/#{ARGV[0]}.git; git --bare init; chown -R git:git /opt/git/;"
182
+ run "echo git@#{yml['domain']}:/opt/git/#{ARGV[0]}.git > /etc/badger/core/files/git/git"
183
+ end
184
+
185
+ desc "rake"
186
+ task :rake, :roles => :web do
187
+ run "cd /opt/web/current/; PATH=/opt/rubygems/bin:$PATH; rake #{brat.gsub("^", " ")} RAILS_ENV=#{environment}"
188
+ end
189
+
190
+ desc "logs"
191
+ task :logs, :roles => :web do
192
+ if brat == "tail"
193
+ trap("INT") do
194
+ run "pkill tail"
195
+ exit
196
+ end
197
+ run "tail -f /opt/web/current/log/#{yml['environment']}.log /opt/web/current/log/god_unicorn.log /var/log/nginx/access.log /var/log/nginx/error.log"
198
+ else
199
+ run "tail /opt/web/current/log/#{yml['environment']}.log /opt/web/current/log/god_unicorn.log /var/log/nginx/access.log /var/log/nginx/error.log"
200
+ end
201
+ end
202
+
203
+ desc "remove"
204
+ task :remove, :roles => :web do
205
+ run "cd /etc/badger/core/scripts/; chmod +x remove_app; ./remove_app #{ARGV[0]}"
206
+ end
207
+
208
+ desc "removedb"
209
+ task :removedb, :roles => :web do
210
+ run "cd /etc/badger/core/scripts/; chmod +x remove_app_db; ./remove_app_db #{ARGV[0]}"
211
+ end
@@ -0,0 +1,6 @@
1
+ username: "typically root"
2
+ password: "server password"
3
+ domain: "domain or ip of the server"
4
+ port: "ssh port usually port 22"
5
+ redis: false #true will host redis locally
6
+ environment: "production" # or "staging", development and testing are excluded.