invoker 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWUzNjRlNGZlNTI4Njg4NjJmNmRiYWQ3NzdkZGRhMDM0MzFjMGYxMg==
4
+ MDQxOTg1ZTE4N2EwYTUyMzA5MDhjNWUyNjZiY2NlMTI5MGFlMDdlYw==
5
5
  data.tar.gz: !binary |-
6
- N2NkYjJiMGM4YmZjZmM4MzQyYTM4YzgzODg5MWMxN2FiMWI3OTQ5MA==
6
+ MjNiOWYwM2UzZDkwNmQ3ZGU0NDcwMGY5YTRlYmJhZTY5ZWRmMWIwYw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YWRhNDI1YTNkMDczMDk0YzQ4MzM1NzczN2U1ZGQzNDdiZWRjY2Y4MDQyMGZk
10
- NjUyY2M0ZDUzMzgzZmJhOWIxY2ZlYmNkNjY0ZTFkYTllMmE1OTQyNWU0OTIz
11
- ZTA4YzNlNzUyYmViNWMyMzBiMDc3NzFjZDY4ODE4ZTE2NjBlZGU=
9
+ YzQxY2VhODQxNzIwN2VlNmI1MmQzN2EzMDEwMWM3MmUyM2MwMDYwYzE1MzFj
10
+ OWIwMTViN2RkZDgyZmI3YWYwNjA0MDczZWU1MDcxMTUzM2NmZDZhNGIzOTEy
11
+ NDMyMWQzNjhkYzZlNzA3ODAwMmIzMTQ2MWZmNTI4MWQ2NGZlMjg=
12
12
  data.tar.gz: !binary |-
13
- YzgzYzQ4Zjk4ZGMzZTY4ZDFjOGI5N2MxMWMyMGYwMWMwOGZlZWMwZjYxNDAy
14
- OWI1MzQ2ZGZkMmQ0ZGFjNzk2Zjc4YWM3ZDhkYTQ3YzY0NGMyYzgwMTM0Mzky
15
- ZTJmNTQwZWEyNjM5ZWU0YzU1NjMyYzEwZTI1MjhmYmZjN2Q1NzY=
13
+ MWE3Njc4Y2FkZTdhYTg4OGU4YzcyMmRkZjAwMGU1MjJhNWQxYTdiYmNiMDQw
14
+ ODFkNGVkZWYzMDcwZjViNzM2YjQyZmVkOTc0ZTczNDQzNDFhNDMyNDgyZmZk
15
+ ZDVkZGEwMDkxNmFiYjc2ZWVkNzM1ZWIzMTQ2MGRlYzA3ZjE3NzM=
@@ -32,6 +32,13 @@ module Invoker
32
32
  end
33
33
  end
34
34
 
35
+ command 'uninstall' do
36
+ banner "Usage : invoker uninstall \n Removes firewall rules created by setup"
37
+ run do |cmd_opts, cmd_args|
38
+ selected_command = OpenStruct.new(:command => 'uninstall')
39
+ end
40
+ end
41
+
35
42
  command 'list' do
36
43
  banner "Usage : invoker list\n List processes managed by invoker"
37
44
  run do |cmd_opts, cmd_args|
@@ -17,6 +17,12 @@ module Invoker
17
17
  config.save
18
18
  end
19
19
 
20
+ def self.delete
21
+ if File.exists?(CONFIG_LOCATION)
22
+ File.delete(CONFIG_LOCATION)
23
+ end
24
+ end
25
+
20
26
  def initialize(options = {})
21
27
  @config = options
22
28
  end
@@ -7,11 +7,21 @@ module Invoker
7
7
  FIREWALL_PLIST_FILE = "/Library/LaunchDaemons/com.codemancers.invoker.firewall.plist"
8
8
  def self.install
9
9
  installer = new
10
- unless installer.check_if_already_setup?
11
- installer.setup_invoker
10
+ if Invoker.darwin?
11
+ if installer.check_if_setup_can_run?
12
+ installer.setup_invoker
13
+ else
14
+ Invoker::Logger.puts("The setup has been already run.".color(:red))
15
+ end
12
16
  else
13
- Invoker::Logger.puts("The setup has been already run.".color(:red))
17
+ Invoker::Logger.puts("Domain feature is currently not supported on systems other than OSX".color(:red))
14
18
  end
19
+ installer
20
+ end
21
+
22
+ def self.uninstall
23
+ installer = new
24
+ installer.uninstall_invoker
15
25
  end
16
26
 
17
27
  def setup_invoker
@@ -29,6 +39,18 @@ module Invoker
29
39
  self
30
40
  end
31
41
 
42
+ def uninstall_invoker
43
+ uninstall_invoker_flag = agree("Are you sure you want to uninstall firewall rules created by setup (y/n) : ")
44
+
45
+ if uninstall_invoker_flag
46
+ remove_resolver_file
47
+ unload_firewall_rule(true)
48
+ flush_dns_rules
49
+ Invoker::Power::Config.delete
50
+ Invoker::Logger.puts("Firewall rules were removed")
51
+ end
52
+ end
53
+
32
54
  def drop_to_normal_user
33
55
  EventMachine.set_effective_user(ENV["SUDO_USER"])
34
56
  end
@@ -61,18 +83,36 @@ module Invoker
61
83
  raise
62
84
  end
63
85
 
64
- def check_if_already_setup?
65
- File.exists?(Invoker::Power::Config::CONFIG_LOCATION)
86
+ def remove_resolver_file
87
+ if File.exists?(RESOLVER_FILE)
88
+ File.delete(RESOLVER_FILE)
89
+ end
90
+ rescue Errno::EACCES
91
+ Invoker::Logger.puts("Running uninstall requires root access, please rerun it with sudo".color(:red))
92
+ raise
93
+ end
94
+
95
+ def check_if_setup_can_run?
96
+ !File.exists?(Invoker::Power::Config::CONFIG_LOCATION)
66
97
  end
67
98
 
68
99
  def install_firewall(balancer_port)
69
100
  File.open(FIREWALL_PLIST_FILE, "w") { |fl|
70
101
  fl.write(plist_string(balancer_port))
71
102
  }
72
- system("launchctl unload -w #{FIREWALL_PLIST_FILE} 2>/dev/null")
103
+ unload_firewall_rule
104
+ load_firewall_rule
105
+ end
106
+
107
+ def load_firewall_rule
73
108
  system("launchctl load -Fw #{FIREWALL_PLIST_FILE} 2>/dev/null")
74
109
  end
75
110
 
111
+ def unload_firewall_rule(remove = false)
112
+ system("launchctl unload -w #{FIREWALL_PLIST_FILE} 2>/dev/null")
113
+ system("rm -rf #{FIREWALL_PLIST_FILE}") if remove
114
+ end
115
+
76
116
  # Ripped from POW code
77
117
  def plist_string(balancer_port)
78
118
  plist =<<-EOD
@@ -16,6 +16,8 @@ module Invoker
16
16
  case selected_command.command
17
17
  when 'setup'
18
18
  setup_pow(selected_command)
19
+ when 'uninstall'
20
+ uninstall_pow(selected_command)
19
21
  when 'start'
20
22
  start_server(selected_command)
21
23
  when 'add'
@@ -35,6 +37,10 @@ module Invoker
35
37
  Invoker::Power::Setup.install()
36
38
  end
37
39
 
40
+ def self.uninstall_pow(selected_command)
41
+ Invoker::Power::Setup.uninstall()
42
+ end
43
+
38
44
  def self.start_server(selected_command)
39
45
  config = Invoker::Parsers::Config.new(selected_command.file, selected_command.port)
40
46
  Invoker.const_set(:CONFIG, config)
@@ -1,3 +1,3 @@
1
1
  module Invoker
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/readme.md CHANGED
@@ -11,92 +11,9 @@ First we need to install `invoker` gem to get command line utility called `invok
11
11
 
12
12
  Currently it only works with Ruby 1.9.3 and 2.0.
13
13
 
14
- You need to start by creating a `ini` file which will define processes you want to manage using invoker. An example
15
- `ini` file is included in the repo.
16
-
17
- [rails]
18
- directory = /home/gnufied/god_particle
19
- command = zsh -c 'bundle exec rails s -p 5000'
20
-
21
- [dj]
22
- directory = /home/gnufied/god_particle
23
- command = zsh -c 'bundle exec ruby script/delayed_job'
24
-
25
- [events]
26
- directory = /home/gnufied/god_particle
27
- command = zsh -c 'bundle exec ruby script/event_server'
28
-
29
- ## Invoker as Pow alternative
30
-
31
- Invoker now supports pow like `.dev` subdomain. It will automatically
32
- make all your app servers defined on subdomain `label.dev`.
33
-
34
- To make it work though, you need to run following command, just once from anywhere:
35
-
36
- ~> sudo invoker setup
37
-
38
- Now because invoker is making your app server available on a subdomain. It requires
39
- control over port on which your applications will be listening. This can be simply
40
- done by replacing specific port number in `ini` file with `$PORT`. For example:
41
-
42
- [spree]
43
- directory = /home/gnufied/spree
44
- command = zsh -c 'bundle exec rails s -p $PORT'
45
-
46
- [api]
47
- directory = /home/gnufied/api
48
- command = zsh -c 'bundle exec rails s -p $PORT'
49
-
50
- [events]
51
- directory = /home/gnufied/god_particle
52
- command = zsh -c 'bundle exec ruby script/event_server'
53
-
54
- The subdomain feature won't work for apps which don't use `$PORT` placeholder.
55
-
56
- ## Running Invoker
57
-
58
- After that you can start process manager via:
59
-
60
- ~> invoker start invoker.ini
61
-
62
- Above command will start all your processes in one terminal with their stdout/stderr merged and labelled.
63
-
64
- Now additionally you can control individual process by,
65
-
66
- # Will try to stop running delayed job by sending SIGINT to the process
67
- ~> invoker remove dj
68
-
69
- # If Process can't be killed by SIGINT send a custom signal
70
- ~> invoker remove dj -s 9
71
-
72
- # add and start running
73
- ~> invoker add dj
74
-
75
- # List currently running processes managed by invoker
76
- ~> invoker list
77
-
78
- # Restart process given by command Label
79
- ~> invoker reload dj
80
-
81
- # Restart process given by command label using specific signal for killing
82
- ~> invoker reload dj -s 9
83
-
84
- You can also enable OSX notifications for crashed processes by installing `terminal-notifier` gem. It is not a dependency, but can be useful if something crashed and you weren't paying attention.
85
-
86
- ## Using with rbenv or rvm ##
87
-
88
- The way `rbenv` and `rvm` work sometimes creates problems when you are trying to use a process supervisor like `invoker`. There are couple of things to keep in mind,
89
- If you are running `invoker` with Ruby version x, but your application requires Ruby version Y:
90
-
91
- * When using `rbenv`, you can define the command with environment variable `RBENV_VERSION=Y` and then start your application. In other words:
92
-
93
- command = RBENV_VERSION=2.0.0-p0 zsh -c "bundle exec rails s"
94
-
95
- * Unless version of Ruby using which you are running `invoker` command and version of Ruby you are using in the application is same, you almost always will want to use
96
- `zsh -c` or `bash -c`. `RVM` in particular requires a login shell and hence sometimes you may have to use `bash -lc`. For example:
97
-
98
- command = bash -lc "rvm 2.0.0-p0 do bundle exec rails s"
14
+ ## Manual ##
99
15
 
16
+ Information about configuring and using Invoker can be found on - [Invoker Website](http://invoker.codemancers.com)
100
17
 
101
18
  ## Bug reports and Feature requests
102
19
 
@@ -2,6 +2,8 @@ require "spec_helper"
2
2
 
3
3
  describe "Setup" do
4
4
  before {
5
+ @original_verbosity = $VERBOSE
6
+ $VERBOSE = nil
5
7
  @old_config = Invoker::Power::Config::CONFIG_LOCATION
6
8
  Invoker::Power::Config.const_set(:CONFIG_LOCATION, "/tmp/.invoker")
7
9
 
@@ -24,6 +26,7 @@ describe "Setup" do
24
26
  File.exists?(Invoker::Power::Setup::RESOLVER_FILE) &&
25
27
  File.delete(Invoker::Power::Setup::RESOLVER_FILE)
26
28
  Invoker::Power::Setup.const_set(:RESOLVER_FILE, @old_resolver)
29
+ $VERBOSE = @original_verbosity
27
30
  }
28
31
 
29
32
  describe "When no setup exists" do
@@ -42,6 +45,14 @@ describe "Setup" do
42
45
  end
43
46
  end
44
47
 
48
+ describe "setup on non osx systems" do
49
+ it "should not run setup" do
50
+ Invoker.expects(:ruby_platform).returns("i686-linux")
51
+ Invoker::Power::Setup.any_instance.expects(:check_if_setup_can_run?).never()
52
+ Invoker::Power::Setup.install
53
+ end
54
+ end
55
+
45
56
  describe "when a setup file exists" do
46
57
  it "should throw error about existing file" do
47
58
  File.open(Invoker::Power::Config::CONFIG_LOCATION, "w") {|fl|
@@ -84,4 +95,18 @@ describe "Setup" do
84
95
  end
85
96
  end
86
97
  end
98
+
99
+ describe "uninstalling firewall rules" do
100
+ it "should uninstall firewall rules and remove all files created by setup" do
101
+ setup = Invoker::Power::Setup.new
102
+
103
+ HighLine.any_instance.expects(:agree).returns(true)
104
+ setup.expects(:remove_resolver_file).once
105
+ setup.expects(:unload_firewall_rule).with(true).once
106
+ setup.expects(:flush_dns_rules).once
107
+ Invoker::Power::Config.expects(:delete).once
108
+
109
+ setup.uninstall_invoker
110
+ end
111
+ end
87
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invoker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hemant Kumar