daemons-rails 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README +20 -0
- data/Rakefile +2 -0
- data/daemons-rails.gemspec +22 -0
- data/install.rb +1 -0
- data/lib/daemons-rails.rb +15 -0
- data/lib/daemons/rails/config.rb +30 -0
- data/lib/daemons/rails/monitoring.rb +44 -0
- data/lib/daemons/rails/version.rb +5 -0
- data/lib/generators/USAGE +15 -0
- data/lib/generators/daemon_generator.rb +22 -0
- data/lib/generators/templates/daemons +5 -0
- data/lib/generators/templates/daemons.yml +6 -0
- data/lib/generators/templates/script.rb +21 -0
- data/lib/generators/templates/script_ctl +8 -0
- data/lib/tasks/daemons.rake +27 -0
- metadata +105 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Daemons Rails support (based on http://github.com/dougal/daemon_generator)
|
2
|
+
================
|
3
|
+
|
4
|
+
To get it work just add dependency to this gem in your Gemfile.
|
5
|
+
|
6
|
+
== GENERATOR ==
|
7
|
+
|
8
|
+
rails generate daemon <name>
|
9
|
+
|
10
|
+
Then insert your code in the lib/daemons/<name>.rb stub. All pids and logs will live in the normal log/ folder. This helps to make things Capistrano friendly.
|
11
|
+
|
12
|
+
== CONTROL ==
|
13
|
+
|
14
|
+
Individual control script:
|
15
|
+
> ./lib/daemons/<name>_ctl [start|stop|restart|status]
|
16
|
+
> rake daemon:<name> [start|stop|restart|status]
|
17
|
+
|
18
|
+
App-wide control script:
|
19
|
+
> ./script/daemons [start|stop|restart]
|
20
|
+
> rake daemons [start|stop|restart|status]
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/daemons/rails/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["mirasrael"]
|
6
|
+
gem.email = []
|
7
|
+
gem.description = %q{daemons gem support for Rails 3}
|
8
|
+
gem.summary = %q{daemons gem support for Rails 3}
|
9
|
+
gem.homepage = ""
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "daemons-rails"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Daemons::Rails::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'rails', '~>3.0'
|
19
|
+
gem.add_dependency 'daemons'
|
20
|
+
gem.add_dependency 'multi_json', '~>1.0'
|
21
|
+
gem.add_development_dependency "rake"
|
22
|
+
end
|
data/install.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
puts IO.read(File.join(File.dirname(__FILE__), 'README'))
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "rails"
|
2
|
+
require "daemons/rails/config"
|
3
|
+
require "daemons/rails/monitoring"
|
4
|
+
|
5
|
+
module Daemons
|
6
|
+
class Railtie < ::Rails::Railtie
|
7
|
+
generators do
|
8
|
+
require "generators/daemon_generator.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
rake_tasks do
|
12
|
+
load "tasks/daemons.rake"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Daemons
|
5
|
+
module Rails
|
6
|
+
class Config
|
7
|
+
def initialize(app_name, root_path)
|
8
|
+
@options = {}
|
9
|
+
config_path = File.join(root_path, "config", "#{app_name}-daemon.yml")
|
10
|
+
config_path = File.join(root_path, "config", "daemons.yml") unless File.exists?(config_path)
|
11
|
+
options = YAML.load(ERB.new(IO.read(config_path)).result)
|
12
|
+
options.each { |key, value| @options[key.to_sym] = value }
|
13
|
+
@options[:dir_mode] = @options[:dir_mode].to_sym
|
14
|
+
@options[:script] ||= File.join(root_path, "lib", "daemons", "#{app_name}.rb")
|
15
|
+
end
|
16
|
+
|
17
|
+
def [](key)
|
18
|
+
@options[key]
|
19
|
+
end
|
20
|
+
|
21
|
+
def []=(key, value)
|
22
|
+
@options[key] = value
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_hash
|
26
|
+
@options
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "daemons"
|
2
|
+
|
3
|
+
module Daemons
|
4
|
+
module Rails
|
5
|
+
class Monitoring
|
6
|
+
def self.daemons_directory=(value)
|
7
|
+
@daemons_directory = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.daemons_directory
|
11
|
+
@daemons_directory ||= ::Rails.root.join('lib', 'daemons')
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.application(app_name)
|
15
|
+
group(app_name).applications.first
|
16
|
+
end
|
17
|
+
|
18
|
+
# We do not cache group to be sure we have actual information about running applications
|
19
|
+
def self.group(app_name)
|
20
|
+
app_config = Daemons::Rails::Config.new(app_name, ::Rails.root)
|
21
|
+
group = Daemons::ApplicationGroup.new("#{app_name}.rb", app_config.to_hash)
|
22
|
+
group.setup
|
23
|
+
group
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.groups
|
27
|
+
groups = []
|
28
|
+
daemons_directory.each_entry do |file|
|
29
|
+
if !file.directory? && file.basename.to_s =~ /(\w+)_ctl/
|
30
|
+
groups << group($1)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
groups
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.status
|
37
|
+
groups.each_with_object({}) do |group, statuses|
|
38
|
+
app = group.applications.first
|
39
|
+
statuses[group.app_name.sub(/\.rb$/, "")] = app && app.running? ? :running : :not_exists
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a daemon in lib/daemons
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate daemon fraggle
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
lib/daemons/fraggle_ctl
|
9
|
+
lib/daemons/fraggle.rb
|
10
|
+
|
11
|
+
Control the daemon with
|
12
|
+
% lib/daemons/fraggle_ctl start|stop|status
|
13
|
+
|
14
|
+
Control all daemons by invoking:
|
15
|
+
% rake daemons:[start|stop|status]
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
class DaemonGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :daemon_name, :type => :string, :default => "application"
|
6
|
+
|
7
|
+
def generate_daemon
|
8
|
+
unless File.exists?(Rails.root.join("script", "daemons"))
|
9
|
+
copy_file "daemons", "script/daemons"
|
10
|
+
chmod 'script/daemons', 0755
|
11
|
+
end
|
12
|
+
template "script.rb", "lib/daemons/#{file_name}.rb"
|
13
|
+
chmod "lib/daemons/#{file_name}.rb", 0755
|
14
|
+
|
15
|
+
template "script_ctl", "lib/daemons/#{file_name}_ctl"
|
16
|
+
chmod "lib/daemons/#{file_name}_ctl", 0755
|
17
|
+
|
18
|
+
unless File.exists?(Rails.root.join("config", "daemons.yml"))
|
19
|
+
copy_file "daemons.yml", "config/daemons.yml"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# You might want to change this
|
4
|
+
ENV["RAILS_ENV"] ||= "development"
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + "/../../config/application"
|
7
|
+
Rails.application.require_environment!
|
8
|
+
|
9
|
+
$running = true
|
10
|
+
Signal.trap("TERM") do
|
11
|
+
$running = false
|
12
|
+
end
|
13
|
+
|
14
|
+
while($running) do
|
15
|
+
|
16
|
+
# Replace this with your code
|
17
|
+
Rails.logger.auto_flushing = true
|
18
|
+
Rails.logger.info "This daemon is still running at #{Time.now}.\n"
|
19
|
+
|
20
|
+
sleep 10
|
21
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require "daemons"
|
4
|
+
require "daemons/rails/config"
|
5
|
+
|
6
|
+
config = Daemons::Rails::Config.new("<%= file_name %>", File.dirname(__FILE__) + "/../../")
|
7
|
+
|
8
|
+
Daemons.run File.dirname(__FILE__) + "/<%= file_name %>.rb", config.to_hash
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
desc "Show status of daemons"
|
4
|
+
task :daemons => "daemons:status"
|
5
|
+
|
6
|
+
namespace :daemons do
|
7
|
+
%w[start stop status].each do |arg|
|
8
|
+
desc "#{arg.capitalize} all daemons."
|
9
|
+
task :"#{arg}" do
|
10
|
+
puts `script/daemons #{arg}`
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
namespace :daemon do
|
16
|
+
Dir['lib/daemons/*_ctl'].each do |controller|
|
17
|
+
app_name = controller.sub(/.*\/(\w+)_ctl/, '\1')
|
18
|
+
namespace app_name do
|
19
|
+
%w[start stop status].each do |arg|
|
20
|
+
desc "#{arg.capitalize} #{app_name} daemons."
|
21
|
+
task :"#{arg}" do
|
22
|
+
puts `#{controller} #{arg}`
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: daemons-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- mirasrael
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-01 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &23654780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *23654780
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: daemons
|
27
|
+
requirement: &23654160 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *23654160
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: multi_json
|
38
|
+
requirement: &23653460 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1.0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *23653460
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &23653000 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *23653000
|
58
|
+
description: daemons gem support for Rails 3
|
59
|
+
email: []
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- .gitignore
|
65
|
+
- Gemfile
|
66
|
+
- README
|
67
|
+
- Rakefile
|
68
|
+
- daemons-rails.gemspec
|
69
|
+
- install.rb
|
70
|
+
- lib/daemons-rails.rb
|
71
|
+
- lib/daemons/rails/config.rb
|
72
|
+
- lib/daemons/rails/monitoring.rb
|
73
|
+
- lib/daemons/rails/version.rb
|
74
|
+
- lib/generators/USAGE
|
75
|
+
- lib/generators/daemon_generator.rb
|
76
|
+
- lib/generators/templates/daemons
|
77
|
+
- lib/generators/templates/daemons.yml
|
78
|
+
- lib/generators/templates/script.rb
|
79
|
+
- lib/generators/templates/script_ctl
|
80
|
+
- lib/tasks/daemons.rake
|
81
|
+
homepage: ''
|
82
|
+
licenses: []
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.8.10
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: daemons gem support for Rails 3
|
105
|
+
test_files: []
|