appscrolls 0.10.1 → 0.11.0

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/ChangeLog.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # ChangeLog
2
2
 
3
+ ## v0.11
4
+
5
+ * `sidekiq` - adds sidekiq gem & web dashboard (hidden via secret string); can deploy worker to Cloud Foundry
6
+
3
7
  ## v0.10
4
8
 
5
9
  * `puma` - added basic support for Puma; also Cloud Foundry will use Puma automatically
data/scrolls/cf.rb CHANGED
@@ -2,13 +2,16 @@
2
2
  # * http://blog.cloudfoundry.com/2012/03/15/using-cloud-foundry-services-with-ruby-part-2-run-time-support-for-ruby-applications/
3
3
  # * http://blog.cloudfoundry.com/2012/04/19/deploying-jruby-on-rails-applications-on-cloud-foundry/
4
4
 
5
- vmc_version = '0.3.23'
5
+ require "yaml"
6
6
 
7
+ @vmc_version = '0.3.23'
7
8
  @name = File.basename(File.expand_path("."))
9
+ @cf_ruby_runtime = "ruby19" # might change later in scrolls
8
10
 
9
- gem 'vmc', "~> #{vmc_version}"
11
+ gem 'vmc', "~> #{@vmc_version}"
10
12
  gem 'cf-runtime'
11
13
 
14
+ known_services = %w[postgresql mysql redis mongodb]
12
15
  required_dbs = %w[mysql postgresql]
13
16
 
14
17
  selected_db = required_dbs.find { |db| scroll? db }
@@ -17,7 +20,7 @@ unless selected_db
17
20
  exit_now = true
18
21
  end
19
22
 
20
- manifest = {"applications"=>
23
+ $cf_manifest = {"applications"=>
21
24
  {"."=>
22
25
  {"name"=>@name,
23
26
  "framework"=>
@@ -25,26 +28,24 @@ manifest = {"applications"=>
25
28
  "info"=>
26
29
  {"mem"=>"256M", "description"=>"Rails Application", "exec"=>nil}},
27
30
  "url"=>"${name}.${target-base}",
31
+ "runtime"=>@cf_ruby_runtime,
28
32
  "mem"=>"256M",
29
33
  "instances"=>1,
30
34
  "services"=>{}}}}
31
35
 
32
- case selected_db.to_sym
33
- when :postgresql
34
- manifest["applications"]["."]["services"]["#{@name}-postgresql"] = {"type"=>"postgresql"}
35
- db_username = config['pg_username'] || 'root'
36
- db_password = config['pg_password'] || ''
37
- when :mysql
38
- manifest["applications"]["."]["services"]["#{@name}-mysql"] = {"type"=>"mysql"}
36
+ known_services.each do |service|
37
+ if scroll? service
38
+ $cf_manifest["applications"]["."]["services"]["#{@name}-#{service}"] = {"type"=>service}
39
+ end
39
40
  end
40
41
 
41
- require "yaml"
42
- create_file "manifest.yml", manifest.to_yaml
42
+ db_username = config['pg_username'] || 'root'
43
+ db_password = config['pg_password'] || ''
43
44
 
44
45
  exit 1 if exit_now
45
46
 
46
47
  after_bundler do
47
- run %Q{vmc _#{vmc_version}_ apps | grep "\\b#{@name}\\b" && vmc _#{vmc_version}_ delete #{@name}}
48
+ cf_delete_app @name
48
49
 
49
50
  # Desirable to vendor everything
50
51
  run "bundle package"
@@ -63,15 +64,39 @@ after_bundler do
63
64
  end
64
65
 
65
66
  after_everything do
67
+ create_file "manifest.yml", $cf_manifest.to_yaml
68
+
66
69
  run "rake assets:precompile"
67
70
  if jruby?
68
71
  run "warble"
69
72
  run "mkdir -p deploy"
70
73
  run "cp #{project_name}.war deploy/"
71
74
  end
72
- run "vmc _#{vmc_version}_ push #{project_name} --runtime ruby19 --path . --no-start"
73
- run "vmc _#{vmc_version}_ env-add #{project_name} BUNDLE_WITHOUT=assets:test:development"
74
- run "vmc _#{vmc_version}_ start #{project_name}"
75
+ run "vmc _#{@vmc_version}_ push #{project_name} --runtime #{@cf_ruby_runtime} --path . --no-start"
76
+ run "vmc _#{@vmc_version}_ env-add #{project_name} BUNDLE_WITHOUT=assets:test:development"
77
+ run "vmc _#{@vmc_version}_ start #{project_name}"
78
+ end
79
+
80
+ def cf_delete_app(name)
81
+ run %Q{vmc _#{@vmc_version}_ apps | grep "\\b#{name}\\b" && vmc _#{@vmc_version}_ delete #{name}}
82
+ end
83
+
84
+ def cf_standalone_command(key, name, command, services={})
85
+ cf_manifest = {"applications"=>
86
+ {"."=>
87
+ {"name"=>name,
88
+ "framework"=>
89
+ {"name"=>"standalone",
90
+ "info"=>
91
+ {"mem"=>"64M", "description"=>"Standalone Application", "exec"=>nil}},
92
+ "url"=>nil,
93
+ "runtime"=>@cf_ruby_runtime,
94
+ "command"=>command,
95
+ "mem"=>"256M",
96
+ "instances"=>1,
97
+ "services"=>services}}}
98
+ create_file "manifest.#{key}.yml", cf_manifest.to_yaml
99
+ "manifest.#{key}.yml"
75
100
  end
76
101
 
77
102
  __END__
data/scrolls/redis.rb CHANGED
@@ -1,7 +1,23 @@
1
1
  gem 'redis'
2
2
 
3
3
  initializer "redis.rb", <<-RUBY
4
- REDIS = Redis.new
4
+ if ENV['VCAP_SERVICES']
5
+ $vcap_services ||= JSON.parse(ENV['VCAP_SERVICES'])
6
+ redis_service_name = $vcap_services.keys.find { |svc| svc =~ /redis/i }
7
+ redis_service = $vcap_services[redis_service_name].first
8
+ $redis_config = {
9
+ host: redis_service['credentials']['host'],
10
+ port: redis_service['credentials']['port'],
11
+ password: redis_service['credentials']['password']
12
+ }
13
+ else
14
+ $redis_config = {
15
+ host: '127.0.0.1',
16
+ port: 6379
17
+ }
18
+ end
19
+
20
+ $redis = Redis.new($redis_config)
5
21
  RUBY
6
22
 
7
23
  if scroll? "eycloud_recipes_on_deploy"
@@ -0,0 +1,63 @@
1
+ gem "sidekiq"
2
+ # slim/sinatra are used for the sidekiq monitoring UI at /sidekiq/SECRET
3
+ gem "slim"
4
+ gem "sinatra", ">= 1.3.0", require: false
5
+
6
+ initializer "sidekiq.rb", <<-RUBY
7
+ if $redis_config[:password]
8
+ redis_url = "redis://:\#{$redis_config[:password]}@\#{$redis_config[:host]}:\#{$redis_config[:port]}/sidekiq"
9
+ else
10
+ redis_url = "redis://\#{$redis_config[:host]}:\#{$redis_config[:port]}/sidekiq"
11
+ end
12
+ Rails.logger.info "Setting sidekiq redis: \#{{ url: redis_url, namespace: 'sidekiq' }.inspect}"
13
+ Sidekiq.redis = { url: redis_url, namespace: 'sidekiq' }
14
+ RUBY
15
+
16
+ if scroll? "eycloud_recipes_on_deploy"
17
+ gem "eycloud-recipe-sidekiq", :group => :eycloud
18
+
19
+ append_file "deploy/cookbooks/main/recipes/default.rb", <<-RUBY
20
+
21
+ require_recipe "sidekiq"
22
+ RUBY
23
+ end
24
+
25
+ directory "app/workers"
26
+ create_file "app/workers/.gitkeep", ""
27
+
28
+ after_bundler do
29
+ route <<-RUBY
30
+ require "sidekiq/web"
31
+ mount Sidekiq::Web, at: "/sidekiq/#{config['sidekiq_admin_secret']}"
32
+ require "sidekiq/api"
33
+ match "queue-status" => proc { [200, {"Content-Type" => "text/plain"}, [Sidekiq::Queue.new.size < 100 ? "OK" : "UHOH" ]] }
34
+ RUBY
35
+ end
36
+
37
+ after_everything do
38
+ if scroll? "cf"
39
+ worker_name = "#{@name}-worker"
40
+ services = $cf_manifest["applications"]["."]["services"]
41
+ manifest_file = cf_standalone_command("worker", worker_name, "bundle exec sidekiq -e production", services)
42
+ cf_delete_app worker_name
43
+ run "vmc _#{@vmc_version}_ push #{worker_name} --runtime #{@cf_ruby_runtime} --path . --manifest #{manifest_file}"
44
+ end
45
+ end
46
+
47
+ __END__
48
+
49
+ name: Sidekiq
50
+ description: Simple, efficient message processing for your Rails 3 application
51
+ author: drnic
52
+
53
+ exclusive: worker
54
+ category: worker
55
+ tags: [worker,background-tasks]
56
+
57
+ requires: [redis]
58
+ run_after: [redis, eycloud_recipes_on_deploy, cf]
59
+
60
+ config:
61
+ - sidekiq_admin_secret:
62
+ type: string
63
+ prompt: "Enter a secret string for the route /sidekiq/SECRET:"
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module AppScrollsScrolls
2
- VERSION = "0.10.1"
2
+ VERSION = "0.11.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appscrolls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-30 00:00:00.000000000 Z
13
+ date: 2013-03-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -230,6 +230,7 @@ files:
230
230
  - scrolls/redis.rb
231
231
  - scrolls/resque.rb
232
232
  - scrolls/rspec.rb
233
+ - scrolls/sidekiq.rb
233
234
  - scrolls/simple_form.rb
234
235
  - scrolls/split.rb
235
236
  - scrolls/sqlite3.rb
@@ -276,7 +277,6 @@ files:
276
277
  - scrolls/untested/sequel.rb
277
278
  - scrolls/untested/settingslogic.rb
278
279
  - scrolls/untested/shoulda_matchers.rb
279
- - scrolls/untested/sidekiq.rb
280
280
  - scrolls/untested/slim.rb
281
281
  - scrolls/untested/spork.rb
282
282
  - scrolls/untested/thinking_sphinx.rb
@@ -308,7 +308,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
308
308
  version: '0'
309
309
  segments:
310
310
  - 0
311
- hash: -3286780568142603210
311
+ hash: 4286488136917017513
312
312
  required_rubygems_version: !ruby/object:Gem::Requirement
313
313
  none: false
314
314
  requirements:
@@ -317,7 +317,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
317
  version: '0'
318
318
  segments:
319
319
  - 0
320
- hash: -3286780568142603210
320
+ hash: 4286488136917017513
321
321
  requirements: []
322
322
  rubyforge_project:
323
323
  rubygems_version: 1.8.25
@@ -1,23 +0,0 @@
1
- gem "sidekiq"
2
-
3
- if scroll? "eycloud_recipes_on_deploy"
4
- gem "eycloud-recipe-sidekiq", :group => :eycloud
5
-
6
- append_file "deploy/cookbooks/main/recipes/default.rb", <<-RUBY
7
-
8
- require_recipe "sidekiq"
9
- RUBY
10
- end
11
-
12
- __END__
13
-
14
- name: Sidekiq
15
- description: Simple, efficient message processing for your Rails 3 application
16
- author: drnic
17
-
18
- exclusive: worker
19
- category: worker
20
- tags: [worker,background-tasks]
21
-
22
- requires: [redis]
23
- run_after: [redis, eycloud_recipes_on_deploy]