apphunkd 0.9.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/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +78 -0
- data/TODO +1 -0
- data/VERSION +1 -0
- data/apphunkd.gemspec +258 -0
- data/bin/apphunkd +4 -0
- data/config/arguments.rb +12 -0
- data/config/boot.rb +68 -0
- data/config/environment.rb +23 -0
- data/config/environments/development.rb +2 -0
- data/config/environments/production.rb +2 -0
- data/config/environments/test.rb +2 -0
- data/config/post-daemonize/readme +5 -0
- data/config/pre-daemonize/readme +12 -0
- data/config/pre-daemonize/requires.rb +2 -0
- data/lib/apphunkd.rb +25 -0
- data/lib/apphunkd/api.rb +5 -0
- data/lib/apphunkd/api/service.rb +27 -0
- data/lib/apphunkd/queue.rb +96 -0
- data/lib/apphunkd/remote.rb +29 -0
- data/lib/apphunkd/remote/result.rb +15 -0
- data/libexec/apphunkd-daemon.rb +13 -0
- data/script/console +3 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/lib/apphunkd/api/service_spec.rb +47 -0
- data/spec/lib/apphunkd/queue_spec.rb +129 -0
- data/spec/lib/apphunkd/remote_spec.rb +61 -0
- data/spec/lib/apphunkd_spec.rb +50 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +13 -0
- data/support/apphunkd.initd +47 -0
- data/support/apphunkd.monitrc +3 -0
- data/tasks/rspec.rake +21 -0
- data/vendor/daemon-kit/Configuration.txt +102 -0
- data/vendor/daemon-kit/Deployment.txt +113 -0
- data/vendor/daemon-kit/History.txt +97 -0
- data/vendor/daemon-kit/Logging.txt +92 -0
- data/vendor/daemon-kit/Manifest.txt +166 -0
- data/vendor/daemon-kit/PostInstall.txt +6 -0
- data/vendor/daemon-kit/README.rdoc +130 -0
- data/vendor/daemon-kit/Rakefile +37 -0
- data/vendor/daemon-kit/RuoteParticipants.txt +113 -0
- data/vendor/daemon-kit/TODO.txt +37 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/USAGE +7 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/daemon_kit_generator.rb +161 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/README +48 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/Rakefile +6 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/bin/daemon.erb +7 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/arguments.rb +12 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/boot.rb +68 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/environment.rb +23 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/environments/development.rb +2 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/environments/production.rb +2 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/environments/test.rb +2 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/post-daemonize/readme +5 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/config/pre-daemonize/readme +12 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/lib/daemon.rb +2 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/libexec/daemon.erb +18 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/script/console +3 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/script/destroy +14 -0
- data/vendor/daemon-kit/app_generators/daemon_kit/templates/script/generate +14 -0
- data/vendor/daemon-kit/bin/daemon_kit +18 -0
- data/vendor/daemon-kit/daemon_generators/amqp/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/amqp/amqp_generator.rb +65 -0
- data/vendor/daemon-kit/daemon_generators/amqp/templates/config/amqp.yml +28 -0
- data/vendor/daemon-kit/daemon_generators/amqp/templates/config/initializers/amqp.rb +7 -0
- data/vendor/daemon-kit/daemon_generators/amqp/templates/libexec/daemon.rb +37 -0
- data/vendor/daemon-kit/daemon_generators/cron/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/cron/cron_generator.rb +64 -0
- data/vendor/daemon-kit/daemon_generators/cron/templates/config/initializers/cron.rb +11 -0
- data/vendor/daemon-kit/daemon_generators/cron/templates/libexec/daemon.rb +43 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/USAGE +11 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/cucumber_generator.rb +38 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/templates/cucumber +8 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/templates/cucumber.rake +13 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/templates/cucumber_environment.rb +2 -0
- data/vendor/daemon-kit/daemon_generators/cucumber/templates/env.rb +7 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/deploy_capistrano_generator.rb +35 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/Capfile +10 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/USAGE +10 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/config/deploy.rb +53 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/config/deploy/production.rb +6 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/config/deploy/staging.rb +6 -0
- data/vendor/daemon-kit/daemon_generators/deploy_capistrano/templates/config/environments/staging.rb +0 -0
- data/vendor/daemon-kit/daemon_generators/jabber/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/jabber/jabber_generator.rb +65 -0
- data/vendor/daemon-kit/daemon_generators/jabber/templates/config/initializers/jabber.rb +7 -0
- data/vendor/daemon-kit/daemon_generators/jabber/templates/config/jabber.yml +26 -0
- data/vendor/daemon-kit/daemon_generators/jabber/templates/libexec/daemon.rb +27 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/nanite_agent_generator.rb +68 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/templates/config/initializers/nanite_agent.rb +6 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/templates/config/nanite.yml +35 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/templates/lib/actors/sample.rb +11 -0
- data/vendor/daemon-kit/daemon_generators/nanite_agent/templates/libexec/daemon.rb +31 -0
- data/vendor/daemon-kit/daemon_generators/rspec/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/rspec/rspec_generator.rb +55 -0
- data/vendor/daemon-kit/daemon_generators/rspec/templates/spec.rb +11 -0
- data/vendor/daemon-kit/daemon_generators/rspec/templates/spec/spec.opts +1 -0
- data/vendor/daemon-kit/daemon_generators/rspec/templates/spec/spec_helper.rb +21 -0
- data/vendor/daemon-kit/daemon_generators/rspec/templates/tasks/rspec.rake +21 -0
- data/vendor/daemon-kit/daemon_generators/ruote/USAGE +5 -0
- data/vendor/daemon-kit/daemon_generators/ruote/ruote_generator.rb +67 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/config/amqp.yml +30 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/config/initializers/ruote.rb +13 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/config/ruote.yml +23 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/lib/daemon.rb +4 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/lib/sample.rb +26 -0
- data/vendor/daemon-kit/daemon_generators/ruote/templates/libexec/daemon.rb +33 -0
- data/vendor/daemon-kit/lib/daemon_kit.rb +54 -0
- data/vendor/daemon-kit/lib/daemon_kit/abstract_logger.rb +235 -0
- data/vendor/daemon-kit/lib/daemon_kit/amqp.rb +38 -0
- data/vendor/daemon-kit/lib/daemon_kit/application.rb +187 -0
- data/vendor/daemon-kit/lib/daemon_kit/arguments.rb +165 -0
- data/vendor/daemon-kit/lib/daemon_kit/commands/console.rb +38 -0
- data/vendor/daemon-kit/lib/daemon_kit/config.rb +108 -0
- data/vendor/daemon-kit/lib/daemon_kit/console_daemon.rb +2 -0
- data/vendor/daemon-kit/lib/daemon_kit/core_ext.rb +1 -0
- data/vendor/daemon-kit/lib/daemon_kit/core_ext/configurable.rb +96 -0
- data/vendor/daemon-kit/lib/daemon_kit/core_ext/string.rb +22 -0
- data/vendor/daemon-kit/lib/daemon_kit/cron.rb +48 -0
- data/vendor/daemon-kit/lib/daemon_kit/cucumber/world.rb +38 -0
- data/vendor/daemon-kit/lib/daemon_kit/deployment/capistrano.rb +482 -0
- data/vendor/daemon-kit/lib/daemon_kit/em.rb +43 -0
- data/vendor/daemon-kit/lib/daemon_kit/error_handlers/base.rb +32 -0
- data/vendor/daemon-kit/lib/daemon_kit/error_handlers/hoptoad.rb +61 -0
- data/vendor/daemon-kit/lib/daemon_kit/error_handlers/mail.rb +85 -0
- data/vendor/daemon-kit/lib/daemon_kit/exceptions.rb +8 -0
- data/vendor/daemon-kit/lib/daemon_kit/initializer.rb +438 -0
- data/vendor/daemon-kit/lib/daemon_kit/jabber.rb +170 -0
- data/vendor/daemon-kit/lib/daemon_kit/nanite.rb +7 -0
- data/vendor/daemon-kit/lib/daemon_kit/nanite/agent.rb +56 -0
- data/vendor/daemon-kit/lib/daemon_kit/pid_file.rb +61 -0
- data/vendor/daemon-kit/lib/daemon_kit/ruote_participants.rb +119 -0
- data/vendor/daemon-kit/lib/daemon_kit/ruote_pseudo_participant.rb +68 -0
- data/vendor/daemon-kit/lib/daemon_kit/ruote_workitem.rb +169 -0
- data/vendor/daemon-kit/lib/daemon_kit/safety.rb +85 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks.rb +2 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks/environment.rake +10 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks/framework.rake +120 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks/god.rake +62 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks/log.rake +8 -0
- data/vendor/daemon-kit/lib/daemon_kit/tasks/monit.rake +29 -0
- data/vendor/daemon-kit/script/console +10 -0
- data/vendor/daemon-kit/script/destroy +14 -0
- data/vendor/daemon-kit/script/generate +14 -0
- data/vendor/daemon-kit/script/txt2html +71 -0
- data/vendor/daemon-kit/spec/abstract_logger_spec.rb +126 -0
- data/vendor/daemon-kit/spec/argument_spec.rb +70 -0
- data/vendor/daemon-kit/spec/config_spec.rb +79 -0
- data/vendor/daemon-kit/spec/configurable_spec.rb +56 -0
- data/vendor/daemon-kit/spec/daemon_kit_spec.rb +7 -0
- data/vendor/daemon-kit/spec/error_handlers_spec.rb +23 -0
- data/vendor/daemon-kit/spec/fixtures/env.yml +15 -0
- data/vendor/daemon-kit/spec/fixtures/noenv.yml +4 -0
- data/vendor/daemon-kit/spec/initializer_spec.rb +26 -0
- data/vendor/daemon-kit/spec/spec.opts +1 -0
- data/vendor/daemon-kit/spec/spec_helper.rb +27 -0
- data/vendor/daemon-kit/tasks/rspec.rake +21 -0
- data/vendor/daemon-kit/templates/god/god.erb +69 -0
- data/vendor/daemon-kit/templates/monit/monit.erb +14 -0
- data/vendor/daemon-kit/test/test_amqp_generator.rb +48 -0
- data/vendor/daemon-kit/test/test_cron_generator.rb +45 -0
- data/vendor/daemon-kit/test/test_daemon-kit_generator.rb +84 -0
- data/vendor/daemon-kit/test/test_daemon_kit_config.rb +28 -0
- data/vendor/daemon-kit/test/test_deploy_capistrano_generator.rb +48 -0
- data/vendor/daemon-kit/test/test_generator_helper.rb +29 -0
- data/vendor/daemon-kit/test/test_helper.rb +7 -0
- data/vendor/daemon-kit/test/test_jabber_generator.rb +49 -0
- data/vendor/daemon-kit/test/test_nanite_agent_generator.rb +49 -0
- data/vendor/daemon-kit/test/test_ruote_generator.rb +45 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail.rb +5 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/address.rb +426 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/attachments.rb +46 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/base64.rb +46 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/compat.rb +41 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/config.rb +67 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/core_extensions.rb +63 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/encode.rb +581 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/header.rb +960 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/index.rb +9 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/interface.rb +1130 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/loader.rb +3 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/mail.rb +578 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/mailbox.rb +495 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/main.rb +6 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/mbox.rb +3 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/net.rb +248 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/obsolete.rb +132 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/parser.rb +1476 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/port.rb +379 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/quoting.rb +118 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/require_arch.rb +58 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/scanner.rb +49 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/scanner_r.rb +261 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/stringio.rb +280 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/utils.rb +337 -0
- data/vendor/daemon-kit/vendor/tmail-1.2.3/tmail/version.rb +39 -0
- data/vendor/daemon-kit/vendor/tmail.rb +13 -0
- metadata +281 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Apphunkd::Remote do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@remote = Apphunkd::Remote
|
|
6
|
+
@mock_uri = mock('URI', :path => '/home', :user => nil, :host => 'localhost', :port => 80)
|
|
7
|
+
URI.stub!(:parse).and_return(@mock_uri)
|
|
8
|
+
Net::HTTP.stub!(:post_form)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'should parse the url' do
|
|
12
|
+
URI.should_receive(:parse).with('http://example.org').and_return(@mock_uri)
|
|
13
|
+
@remote.post('http://example.org')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should send the payload to a specified parsed uri' do
|
|
17
|
+
Net::HTTP.should_receive(:post_form).with(@mock_uri, { :value => 'home' })
|
|
18
|
+
@remote.post('http://example.org', { :value => 'home' })
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'timeout' do
|
|
22
|
+
it 'should wrap the post in a default Timeout of 30 seconds' do
|
|
23
|
+
Timeout.should_receive(:timeout).with(30)
|
|
24
|
+
@remote.post('http://example.org', { :value => 'home' })
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'should accept a timeout as additional argument' do
|
|
28
|
+
Timeout.should_receive(:timeout).with(50)
|
|
29
|
+
@remote.post('http://example.org', { :value => 'home' }, 50)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'result' do
|
|
34
|
+
before(:each) do
|
|
35
|
+
@mock_net_response = mock('Net::HTTPResponse', :code => 200)
|
|
36
|
+
Net::HTTP.stub!(:post_form).and_return(@mock_net_response)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should return status :timeout if the time run out' do
|
|
40
|
+
Timeout.should_receive(:timeout).and_raise(Timeout::Error)
|
|
41
|
+
result = @remote.post('http://example.org', { :value => 'home' }, 0)
|
|
42
|
+
result.status.should == :timeout
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should return status :connection_error if the connection failed' do
|
|
46
|
+
Net::HTTP.should_receive(:post_form).and_raise(SocketError)
|
|
47
|
+
result = @remote.post('http://example.org', { :value => 'home' }, 0)
|
|
48
|
+
result.status.should == :connection_error
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'should return the status code' do
|
|
52
|
+
result = @remote.post('http://example.org', { :value => 'home' }, 0)
|
|
53
|
+
result.status.should == :ok
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should return the original response' do
|
|
57
|
+
result = @remote.post('http://example.org', { :value => 'home' }, 0)
|
|
58
|
+
result.response == @mock_net_response
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
describe Apphunkd do
|
|
4
|
+
describe "#run!" do
|
|
5
|
+
before(:each) do
|
|
6
|
+
Apphunkd.stub!(:initialize_queue)
|
|
7
|
+
Apphunkd.stub!(:initialize_api_service)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should initialize the queue" do
|
|
11
|
+
Apphunkd.should_receive(:initialize_queue)
|
|
12
|
+
Apphunkd.run!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should initialize the api service" do
|
|
16
|
+
Apphunkd.should_receive(:initialize_api_service)
|
|
17
|
+
Apphunkd.run!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "#initialize_queue" do
|
|
22
|
+
before(:each) do
|
|
23
|
+
@queue = mock('Queue instance')
|
|
24
|
+
Apphunkd::Queue.stub!(:new).and_return(@queue)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should create and assign a new Queue instance" do
|
|
28
|
+
@queue.stub!(:activate!)
|
|
29
|
+
Apphunkd.initialize_queue
|
|
30
|
+
Apphunkd.queue.should eql(@queue)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'activate the queue' do
|
|
34
|
+
@queue.should_receive(:activate!)
|
|
35
|
+
Apphunkd.initialize_queue
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#initialize_api_service' do
|
|
40
|
+
it 'should start the api service' do
|
|
41
|
+
Apphunkd::API::Service.should_receive(:run!)
|
|
42
|
+
Apphunkd.initialize_api_service
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should start on 127.0.0.1:8212' do
|
|
46
|
+
Apphunkd::API::Service.should_receive(:run!).with(:port => '8212', :host => '127.0.0.1')
|
|
47
|
+
Apphunkd.initialize_api_service
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/spec/spec.opts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# apphunkd Startup script for apphunkd by Andreas Wolff
|
|
4
|
+
#
|
|
5
|
+
# description: apphunkd is a daemon for sending messages from your applications to apphunk.com
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
puts "Starting.."
|
|
10
|
+
`apphunkd start -e production`
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def stop
|
|
14
|
+
puts "Stopping.."
|
|
15
|
+
`apphunkd stop -e production`
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def restart
|
|
19
|
+
stop
|
|
20
|
+
start
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def status
|
|
24
|
+
if File.exist?('/var/run/apphunkd.pid')
|
|
25
|
+
pid = File.readlines('/var/run/apphunkd.pid')[0].chomp
|
|
26
|
+
puts "apphunkd running (#{pid}).."
|
|
27
|
+
else
|
|
28
|
+
puts "apphunkd not running.."
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
unless ['start', 'stop', 'restart', 'status'].include? ARGV.first
|
|
34
|
+
puts "Usage: apphunkd {start|stop|restart|status}"
|
|
35
|
+
exit
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
case
|
|
39
|
+
when ARGV.include?('start')
|
|
40
|
+
start
|
|
41
|
+
when ARGV.include?('stop')
|
|
42
|
+
stop
|
|
43
|
+
when ARGV.include?('restart')
|
|
44
|
+
restart
|
|
45
|
+
when ARGV.include?('status')
|
|
46
|
+
status
|
|
47
|
+
end
|
data/tasks/rspec.rake
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# begin
|
|
2
|
+
# require 'spec'
|
|
3
|
+
# rescue LoadError
|
|
4
|
+
# require 'rubygems'
|
|
5
|
+
# require 'spec'
|
|
6
|
+
# end
|
|
7
|
+
# begin
|
|
8
|
+
# require 'spec/rake/spectask'
|
|
9
|
+
# rescue LoadError
|
|
10
|
+
# puts <<-EOS
|
|
11
|
+
# To use rspec for testing you must install rspec gem:
|
|
12
|
+
# gem install rspec
|
|
13
|
+
# EOS
|
|
14
|
+
# exit(0)
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# desc "Run the specs under spec/"
|
|
18
|
+
# Spec::Rake::SpecTask.new do |t|
|
|
19
|
+
# t.spec_opts = ['--options', "spec/spec.opts"]
|
|
20
|
+
# t.spec_files = FileList['spec/**/*_spec.rb']
|
|
21
|
+
# end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
= Configuring your daemon
|
|
2
|
+
|
|
3
|
+
daemon-kit provides a multitude of ways to configure your daemon, this document
|
|
4
|
+
will outline the different options available to you.
|
|
5
|
+
|
|
6
|
+
== Configuration files and #DaemonKit::Config
|
|
7
|
+
|
|
8
|
+
#DaemonKit::Config gives you easy access to any YAML configuration
|
|
9
|
+
files you have in your <em>config</em> directory.
|
|
10
|
+
|
|
11
|
+
You can access the configuration files like this:
|
|
12
|
+
|
|
13
|
+
config = DaemonKit::Config.load('sample')
|
|
14
|
+
|
|
15
|
+
The above snippet relies on the presence of a <em>config/sample.yml</em> file.
|
|
16
|
+
|
|
17
|
+
#DaemonKit::Config is environment aware, so configuration files are
|
|
18
|
+
parsed for a top-level key that is the same as the value of
|
|
19
|
+
<em>DAEMON_ENV</em>, and if present is loaded into the object as the
|
|
20
|
+
configuration data. If the key is not present, the whole YAML
|
|
21
|
+
document is exposed as configuration data.
|
|
22
|
+
|
|
23
|
+
== Command line arguments
|
|
24
|
+
|
|
25
|
+
The most flexible way to configure your daemon is through command line
|
|
26
|
+
arguments, or switches.
|
|
27
|
+
|
|
28
|
+
DaemonKit includes a couple of its own arguments that can be used:
|
|
29
|
+
|
|
30
|
+
-e ENV (or --env ENV) to set the daemon environment
|
|
31
|
+
--pid /path/to/pidfile to set the path to a pidfile
|
|
32
|
+
-l path (or --log path) to set the path for the log file
|
|
33
|
+
-v shows the DaemonKit version
|
|
34
|
+
-h shows a useful help message
|
|
35
|
+
|
|
36
|
+
=== Custom arguments
|
|
37
|
+
|
|
38
|
+
It is possible for you to specify your own arguments as well, by
|
|
39
|
+
updating the <em>config/arguments.rb</em> file. This file is eval'd
|
|
40
|
+
inside #DaemonKit::Arguments and gives you access to the following two
|
|
41
|
+
variables:
|
|
42
|
+
|
|
43
|
+
* opts - Instance of OptionParser[http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html]
|
|
44
|
+
* @options - A standard Ruby hash that you can populate and access later
|
|
45
|
+
|
|
46
|
+
Your custom arguments can be accessed like this:
|
|
47
|
+
|
|
48
|
+
DaemonKit.arguments.options
|
|
49
|
+
|
|
50
|
+
=== Advanced Configuration
|
|
51
|
+
|
|
52
|
+
All the writable attributes of the default #DaemonKit::Configuration
|
|
53
|
+
instance call also be modified from the command line using the special
|
|
54
|
+
<em>--config</em> arguments:
|
|
55
|
+
|
|
56
|
+
--config force_kill_wait=30
|
|
57
|
+
|
|
58
|
+
This happens after <em>config/environment.rb</em> is processed, so all
|
|
59
|
+
command line arguments will overwrite those values.
|
|
60
|
+
|
|
61
|
+
=== Daemon umask
|
|
62
|
+
|
|
63
|
+
By default daemon processes run with a umask of 022, but this can be changed
|
|
64
|
+
on the command line or in +config/environment.rb+.
|
|
65
|
+
|
|
66
|
+
To set a more restrictive umask via command line arguments, you can start your
|
|
67
|
+
daemon like this:
|
|
68
|
+
|
|
69
|
+
$ ./bin/daemon start --config umask=0077
|
|
70
|
+
|
|
71
|
+
Or the same in +config/environment.rb+
|
|
72
|
+
|
|
73
|
+
DaemonKit::Initializer.run do |config|
|
|
74
|
+
# ...
|
|
75
|
+
|
|
76
|
+
# restrictive umask
|
|
77
|
+
config.umask = 0077
|
|
78
|
+
|
|
79
|
+
# ...
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
=== Privilege Separation
|
|
83
|
+
|
|
84
|
+
By default daemon processes run as the user that starts them, inheriting all
|
|
85
|
+
their privileges (or lack thereof). Getting daemon-kit to drop privileges
|
|
86
|
+
can currently only be done using command-line parameters, and only works
|
|
87
|
+
reliable on *nix (OSX seemed cranky at the time of testing).
|
|
88
|
+
|
|
89
|
+
$ ./bin/daemon start --config user=nobody --config group=nobody
|
|
90
|
+
|
|
91
|
+
Privileges are dropped at the earliest possible phase of starting the daemon.
|
|
92
|
+
|
|
93
|
+
Things to note on privilege separation:
|
|
94
|
+
|
|
95
|
+
* You generally have to be root to be able to perform this
|
|
96
|
+
* File system permissions for +log/+ needs to be correct
|
|
97
|
+
* Daemon-kit will only shed privileges on the +start+ command, not on +run+
|
|
98
|
+
* Make sure your code is secure if accepting stuff from the outside world
|
|
99
|
+
|
|
100
|
+
The implementation stems from the advice given by Joe Damato on his blog post
|
|
101
|
+
http://timetobleed.com/tag/privilege-escalation/
|
|
102
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
= Deploying your daemons
|
|
2
|
+
|
|
3
|
+
daemon-kit provides built-in support for
|
|
4
|
+
Capistrano[http://www.capify.org] deployments, using a customized
|
|
5
|
+
version of the standard 'deploy' recipe for Ruby on Rails
|
|
6
|
+
applications.
|
|
7
|
+
|
|
8
|
+
User of Vlad[http://hitsquad.rubyforge.org/vlad/]? Get in touch so we
|
|
9
|
+
can discuss your contribution to daemon-kit ;)
|
|
10
|
+
|
|
11
|
+
== Generating capistrano configurations
|
|
12
|
+
|
|
13
|
+
When generating a new daemon, you can pass the <em>-d capistrano</em>
|
|
14
|
+
argument to the <em>daemon_kit</em> command. In case you already have
|
|
15
|
+
a generated daemon, run the following command inside your project:
|
|
16
|
+
|
|
17
|
+
$ ruby script/generate deploy_capistrano
|
|
18
|
+
|
|
19
|
+
== Overview of generated configurations
|
|
20
|
+
|
|
21
|
+
The generator creates the following files worth noticing:
|
|
22
|
+
|
|
23
|
+
config/deploy.rb
|
|
24
|
+
config/deploy/*.rb
|
|
25
|
+
|
|
26
|
+
The generator also creates a new environment for you, a
|
|
27
|
+
<em>staging</em> environment. Useful for testing your deployments
|
|
28
|
+
before taking anything into production.
|
|
29
|
+
|
|
30
|
+
== Configuring capistrano
|
|
31
|
+
|
|
32
|
+
For each environment (staging & production) you only need to specify
|
|
33
|
+
the target hosts in <em>config/deploy/(staging|production).rb</em>.
|
|
34
|
+
|
|
35
|
+
Each of the stub files have example configuration values you can just
|
|
36
|
+
edit.
|
|
37
|
+
|
|
38
|
+
The rest of your configuration generally occurs in
|
|
39
|
+
<em>config/deploy.rb</em>.
|
|
40
|
+
|
|
41
|
+
Everything works exactly like standard capistrano, with the exception
|
|
42
|
+
of the following directives:
|
|
43
|
+
|
|
44
|
+
* :config_files
|
|
45
|
+
* :shared_children
|
|
46
|
+
|
|
47
|
+
=== :config_files
|
|
48
|
+
|
|
49
|
+
Since the daemon configuration files will almost always differ between
|
|
50
|
+
your development environment and your staging/production environment,
|
|
51
|
+
the deployment recipe makes adequate provision for this.
|
|
52
|
+
|
|
53
|
+
Use the :config_files directive to set an array of file names from the
|
|
54
|
+
<em>config</em> directory that you want replaced with production
|
|
55
|
+
configuration files found on the server:
|
|
56
|
+
|
|
57
|
+
set :config_files, %w{ amqp.yaml }
|
|
58
|
+
|
|
59
|
+
On your target server, in the <em>:deploy_to</em> folder, create a
|
|
60
|
+
<em>config</em> directory and place your configuration files in
|
|
61
|
+
there. One each deploy, capistrano will rename the files in your
|
|
62
|
+
deployed configuration directory with a <em>.orig</em> extension, and copy
|
|
63
|
+
the files from <em>:deploy_to/config</em> into the newly deployed
|
|
64
|
+
release.
|
|
65
|
+
|
|
66
|
+
This makes it easy to keep production configurations out of your
|
|
67
|
+
working directories or version control systems.
|
|
68
|
+
|
|
69
|
+
=== :shared_children
|
|
70
|
+
|
|
71
|
+
The original capistrano recipe that daemon-kit's recipe is built from
|
|
72
|
+
provided support for tracking shared directories between
|
|
73
|
+
deployments. This works by removing the deployed directory, and
|
|
74
|
+
creating a symlink from <em>:deploy_to/shared/</em> into the correct
|
|
75
|
+
location within the deployed release.
|
|
76
|
+
|
|
77
|
+
You specify your list of directories with the
|
|
78
|
+
<em>:shared_children</em>, each being relative to the DAEMON_ROOT.
|
|
79
|
+
|
|
80
|
+
set :shared_children, %w{ log }
|
|
81
|
+
|
|
82
|
+
The daemon-kit deployment recipe makes no assumptions on shared
|
|
83
|
+
directories, and gives you full control. The default only includes the
|
|
84
|
+
log directory, which you can remove if you want separate log
|
|
85
|
+
directories for each deployed release.
|
|
86
|
+
|
|
87
|
+
== Remote dependencies
|
|
88
|
+
|
|
89
|
+
By default, the deployment configuration file is configured to check
|
|
90
|
+
the remote dependencies before updating the code on the target
|
|
91
|
+
host. You can disable this behaviour by commenting out the following
|
|
92
|
+
line:
|
|
93
|
+
|
|
94
|
+
before "deploy:update_code", "deploy:check"
|
|
95
|
+
|
|
96
|
+
The only default remote dependency is the daemon-kit gem, and it will
|
|
97
|
+
check for the same version you currently have installed (or a later
|
|
98
|
+
one).
|
|
99
|
+
|
|
100
|
+
== More capistrano resources
|
|
101
|
+
|
|
102
|
+
To see a list of available commands, please run the following command
|
|
103
|
+
in the root of your project:
|
|
104
|
+
|
|
105
|
+
$ cap -vT
|
|
106
|
+
|
|
107
|
+
For more information on capistrano, please refer to the following list
|
|
108
|
+
of online resources:
|
|
109
|
+
|
|
110
|
+
* Capistrano Website[http://www.capify.org]
|
|
111
|
+
* Capistrano Wiki[http://wiki.capify.org]
|
|
112
|
+
* Capistrano Group[http://groups.google.com/group/capistrano]
|
|
113
|
+
* #capistrano on Freenode
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
== 0.1.7.10 (WIP)
|
|
2
|
+
|
|
3
|
+
* Ruote remote participants
|
|
4
|
+
* Allow process umask to be configured, defaults to 022
|
|
5
|
+
* Updates to DaemonKit::Config hashes
|
|
6
|
+
* Fixed argument parsing bug (reported by Mathijs Kwik (bluescreen303)
|
|
7
|
+
* Support for privilege separation (See Configuration.txt)
|
|
8
|
+
|
|
9
|
+
== 0.1.7.9 2009-06-22
|
|
10
|
+
|
|
11
|
+
* Backtraces only logged on unclean shutdown
|
|
12
|
+
* AMQP generator got new keep alive code
|
|
13
|
+
|
|
14
|
+
== 0.1.7.8 2009-06-22
|
|
15
|
+
|
|
16
|
+
* Optional logging of all exceptions when the daemon process dies
|
|
17
|
+
unexpectedly
|
|
18
|
+
* Update generated environment.rb to reflect new backtraces option
|
|
19
|
+
|
|
20
|
+
== 0.1.7.7 2009-06-22
|
|
21
|
+
|
|
22
|
+
* Fixed compatibility with rufus-scheduler-2.0.0 (or newer) in cron
|
|
23
|
+
generator
|
|
24
|
+
* Started central eventmachine reactor management code
|
|
25
|
+
* Now depends on eventmachine
|
|
26
|
+
|
|
27
|
+
== 0.1.7.6 (Not released)
|
|
28
|
+
|
|
29
|
+
* Support for cucumber
|
|
30
|
+
* Fixed issue in daemon_kit:upgrade task
|
|
31
|
+
* Moved rspec generator into new home
|
|
32
|
+
* Removed conflicting rubigen generator, messed with our script directory
|
|
33
|
+
* Fixed bug where environment.rb overwrites some --config values (reported by Josh Owens)
|
|
34
|
+
|
|
35
|
+
== 0.1.7.5 2009-06-08
|
|
36
|
+
|
|
37
|
+
* New AbstractLogger
|
|
38
|
+
** Default Logger backend
|
|
39
|
+
** SysLogLogger support
|
|
40
|
+
* More documentation
|
|
41
|
+
|
|
42
|
+
== 0.1.7.4 2009-06-05
|
|
43
|
+
|
|
44
|
+
* Fixed bug with control script generator (thanks Sho Fukamachi)
|
|
45
|
+
* Enhanced deploy.rb template to check for current dk gem verion,
|
|
46
|
+
unless vendored
|
|
47
|
+
* Fix bug in capistrano recipe for restarting daemons
|
|
48
|
+
* Added log:truncate rake task
|
|
49
|
+
* Error mails now handled by TMail
|
|
50
|
+
|
|
51
|
+
== 0.1.7.3 2009-05-31
|
|
52
|
+
|
|
53
|
+
* Removed dependency on daemons gem, now handled in house
|
|
54
|
+
* New argument management
|
|
55
|
+
* Some more docs
|
|
56
|
+
|
|
57
|
+
== 0.1.7.1 2009-05-28
|
|
58
|
+
|
|
59
|
+
* Fixed some minor issue with Capistrano support
|
|
60
|
+
* Added support for generating dog/monit configuration files via rake
|
|
61
|
+
* Initial implementation of ./script/* utilities
|
|
62
|
+
|
|
63
|
+
== 0.1.7 2009-05-26
|
|
64
|
+
|
|
65
|
+
* Capistrano deployment support
|
|
66
|
+
|
|
67
|
+
== 0.1.6 2009-05-13
|
|
68
|
+
|
|
69
|
+
* DaemonKit::Safety class to handle the trapping and logging of
|
|
70
|
+
exceptions, as well as email notifications or Hoptoad notifications.
|
|
71
|
+
* New config/pre-daemonize and config/post-daemonize structure
|
|
72
|
+
* New tasks to simplify upgrading daemon-kit projects
|
|
73
|
+
* Fixed some other annoyances and bugs
|
|
74
|
+
* Bigger TODO list
|
|
75
|
+
|
|
76
|
+
== 0.1.5 2009-05-07
|
|
77
|
+
|
|
78
|
+
* DaemonKit::Config class to easy the use of YAML configs internally,
|
|
79
|
+
and in generated daemons
|
|
80
|
+
|
|
81
|
+
== 0.1.2 2009-04-28
|
|
82
|
+
|
|
83
|
+
* Added missing rubigen dependency
|
|
84
|
+
|
|
85
|
+
== 0.1.1 2009-04-27
|
|
86
|
+
|
|
87
|
+
* AMQP consumer generator added
|
|
88
|
+
* 'cron' style generator added
|
|
89
|
+
* Allow configuring dir_mode and dir (pid file location) (Jim Lindley)
|
|
90
|
+
|
|
91
|
+
== 0.1.0 2009-01-08
|
|
92
|
+
|
|
93
|
+
* Ability to freeze the gem/edge copies of DaemonKit
|
|
94
|
+
* Simple non-evented Jabber generator
|
|
95
|
+
* Flexible UNIX signal trapping configuration
|
|
96
|
+
* Basic generator completed
|
|
97
|
+
* 1 small step for man, 1 giant leap for mankind
|