summaryrefslogtreecommitdiff
path: root/bin/tapicero
blob: d3a9bf80554bffdfbdf7c79b1cd0688f276c4d53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env ruby

#
# Tapicero Daemon
#

require 'pathname'
BASE_DIR = Pathname.new(__FILE__).realpath + '../..'

begin
  #
  # try without rubygems (might be already loaded or not present)
  #
  require 'tapicero/version'
rescue LoadError
  #
  # try with rubygems
  #
  require "#{BASE_DIR}/lib/tapicero/version.rb"
  Tapicero::REQUIRE_PATHS.each do |path|
    path = BASE_DIR + path
    $LOAD_PATH.unshift path unless $LOAD_PATH.include?(path)
  end
  require 'rubygems'
  require 'tapicero/version'
end

# Graceful Ctrl-C
Signal.trap("SIGINT") do
  Tapicero.logger.warn "Received SIGINT - stopping tapicero"
  puts "\nQuit - leaving tapicero"
  exit
end

# this changes later, so save the initial current directory
CWD = Dir.pwd

# handle --version ourselves
if ARGV.grep(/--version/).any?
  puts "tapicero #{Tapicero::VERSION}, ruby #{RUBY_VERSION}"
  exit(0)
end

# --run-once            create databases for new users and then exit
# --rerun               also act upon users that have already been processed
# --overwrite-security  overwrite existing couch security settings
# TODO: not implemented yet:
# --overwrite-designs   overwrite existing design documents
Tapicero::FLAGS.concat   ARGV.grep(/--.*/)
Tapicero::CONFIGS.concat ARGV.grep(/\.ya?ml$/)

# if flags have been set but an action is missing we assume
# tapicero should run in foreground.
if ARGV.first && ARGV.first.start_with?('--')
  ARGV.unshift '--'
  ARGV.unshift 'run'
end


#
# Start the daemon
#
require 'daemons'
if Process::Sys.getuid == 0
  options = {:app_name => 'tapicero', :dir_mode => :system}  # this will put the pid file in /var/run
else
  options = {:app_name => 'tapicero', :dir_mode => :normal, :dir => '/tmp'} # this will put the pid file in /tmp
end
begin
  Daemons.run("#{BASE_DIR}/lib/tapicero_daemon.rb", options)
rescue SystemExit
rescue Exception => exc
  puts exc.class.name + exc.to_s
  puts exc.backtrace.join("\n")
end