picnic 0.6.5 → 0.7.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/History.txt +9 -0
- data/Rakefile +1 -1
- data/lib/picnic/cli.rb +24 -23
- data/lib/picnic/postambles.rb +53 -44
- data/lib/picnic/service_control.rb +5 -0
- data/lib/picnic/version.rb +2 -2
- data/lib/picnic.rb +10 -19
- metadata +3 -3
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.7 :: In progress...
|
2
|
+
|
3
|
+
* Can now configure the CLI aspect of an app to respond to additional command-
|
4
|
+
line flags. This is done by passing a block of OptionParser calls as
|
5
|
+
an :extra_cli_options parameter to the Cli initializer.
|
6
|
+
* activerecord is no longer a requirement. However you should make sure that
|
7
|
+
you take care of loading activerecord in your app if you intend to use
|
8
|
+
Camping's database functionality.
|
9
|
+
|
1
10
|
=== 0.6.5 :: 2008-09-18
|
2
11
|
|
3
12
|
* Fixed compatibility with ActiveSupport 2.1.
|
data/Rakefile
CHANGED
data/lib/picnic/cli.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
|
3
|
-
begin
|
4
|
-
require 'active_support'
|
5
|
-
rescue LoadError
|
6
|
-
require 'rubygems'
|
7
|
-
require 'active_support'
|
8
|
-
end
|
9
|
-
|
10
3
|
module Picnic
|
11
4
|
# Provides a command-line interface for your app.
|
12
5
|
# This is useful for creating a 'bin' file for launching your application.
|
@@ -22,7 +15,7 @@ module Picnic
|
|
22
15
|
#
|
23
16
|
# cli = Picnic::Cli.new(
|
24
17
|
# 'foo',
|
25
|
-
# :app_path =>
|
18
|
+
# :app_path => "/path/to/foo.br"
|
26
19
|
# )
|
27
20
|
#
|
28
21
|
# cli.handle_cli_input
|
@@ -38,7 +31,7 @@ module Picnic
|
|
38
31
|
# binary, which by default is expected to be in the same directory
|
39
32
|
# as the service control script.
|
40
33
|
# +options+:: A hash overriding default options. The options are:
|
41
|
-
# +
|
34
|
+
# +app_file+:: The path to your application's main Ruby file.
|
42
35
|
# By default this is expected to be <tt>../lib/<app>.rb</tt>
|
43
36
|
# +pid_file+:: Where the app's PID file (containing the app's
|
44
37
|
# process ID) should be placed. By default this is
|
@@ -49,28 +42,33 @@ module Picnic
|
|
49
42
|
@app = app
|
50
43
|
|
51
44
|
@options = options || {}
|
52
|
-
@options[:
|
45
|
+
@options[:app_file] ||= File.expand_path(File.dirname(File.expand_path($0))+"/../lib/#{app}.rb")
|
53
46
|
@options[:app_module] ||= app.capitalize
|
54
47
|
@options[:pid_file] ||= "/etc/#{app}/#{app}.pid"
|
55
48
|
@options[:conf_file] ||= nil
|
56
49
|
@options[:verbose] ||= false
|
57
|
-
|
58
|
-
@options = options
|
59
50
|
end
|
60
51
|
|
61
52
|
# Parses command line options given to the script.
|
62
53
|
def handle_cli_input
|
63
|
-
if File.exists? options[:
|
54
|
+
if File.exists? options[:app_file]
|
64
55
|
# try to use given app base path
|
65
|
-
|
66
|
-
path = File.dirname(options[:app_path])+"/"
|
56
|
+
$APP_PATH = File.dirname(options[:app_file]).gsub(/\/lib\/?$/, '')
|
67
57
|
else
|
68
|
-
# fall back to using gem installation
|
69
|
-
path = ""
|
70
58
|
require 'rubygems'
|
59
|
+
|
60
|
+
# fall back to using gem installation
|
61
|
+
matches = Gem::source_index.find_name(app)
|
62
|
+
raise LoadError, "#{app} gem doesn't appear to be installed!" if matches.empty?
|
63
|
+
|
64
|
+
gem_spec = matches.last
|
65
|
+
$APP_PATH = gem_spec.full_gem_path
|
66
|
+
|
71
67
|
gem(app)
|
72
68
|
end
|
73
69
|
|
70
|
+
$: << $APP_PATH+"/lib"
|
71
|
+
|
74
72
|
$PID_FILE = "/etc/#{app}/#{app}.pid"
|
75
73
|
|
76
74
|
OptionParser.new do |opts|
|
@@ -97,23 +95,26 @@ module Picnic
|
|
97
95
|
puts "Not running as daemon. Ignoring pid option"
|
98
96
|
end
|
99
97
|
end
|
100
|
-
|
98
|
+
|
99
|
+
# :extra_cli_options should be a block with additonal app-specific opts.on() calls
|
100
|
+
if @options[:extra_cli_options]
|
101
|
+
@options[:extra_cli_options].call(opts)
|
102
|
+
end
|
103
|
+
|
101
104
|
opts.on_tail("-h", "--help", "Show this message") do
|
102
105
|
puts opts
|
103
106
|
exit
|
104
107
|
end
|
105
108
|
|
106
109
|
opts.on_tail("-V", "--version", "Show version number") do
|
107
|
-
require "#{
|
108
|
-
app_mod = @options[:app_module]
|
110
|
+
require "#{$APP_PATH}/lib/#{app}/version.rb"
|
111
|
+
app_mod = Object.const_get(@options[:app_module])
|
109
112
|
puts "#{app}-#{app_mod::VERSION::STRING}"
|
110
113
|
exit
|
111
114
|
end
|
112
115
|
end.parse!
|
113
116
|
|
114
|
-
$APP_PATH
|
115
|
-
|
116
|
-
load "#{path}/lib/#{app}.rb"
|
117
|
+
require "#{$APP_PATH}/lib/#{app}.rb"
|
117
118
|
end
|
118
119
|
end
|
119
120
|
end
|
data/lib/picnic/postambles.rb
CHANGED
@@ -169,58 +169,67 @@ module Picnic
|
|
169
169
|
:cwd => $APP_PATH
|
170
170
|
}
|
171
171
|
|
172
|
-
# need to close all IOs before daemonizing
|
173
|
-
$LOG.close if $DAEMONIZE
|
174
|
-
|
175
|
-
public_dirs = Picnic::Conf.public_dirs || Picnic::Conf.public_dir
|
176
|
-
public_dirs = [public_dirs] unless
|
177
|
-
public_dirs.kind_of? Array || public_dirs.nil?
|
178
|
-
|
179
172
|
begin
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
173
|
+
# need to close all IOs before daemonizing
|
174
|
+
$LOG.close if $DAEMONIZE
|
175
|
+
|
176
|
+
public_dirs = Picnic::Conf.public_dirs || Picnic::Conf.public_dir
|
177
|
+
public_dirs = [public_dirs] unless
|
178
|
+
public_dirs.kind_of? Array || public_dirs.nil?
|
179
|
+
|
180
|
+
begin
|
181
|
+
app_mod = self
|
182
|
+
mongrel = Mongrel::Configurator.new settings do
|
183
|
+
daemonize :log_file => Picnic::Conf.log[:file], :cwd => $APP_PATH if $DAEMONIZE
|
184
|
+
app_mod.init_logger
|
185
|
+
#app_mod.init_db_logger
|
186
|
+
listener :port => Picnic::Conf.port do
|
187
|
+
uri Picnic::Conf.uri_path, :handler => Mongrel::Camping::CampingHandler.new(app_mod)
|
188
|
+
|
189
|
+
if public_dirs
|
190
|
+
public_dirs.each do |d|
|
191
|
+
dir = d[:dir]
|
192
|
+
path = "#{Picnic::Conf.uri_path}/#{d[:path]}".gsub(/\/\/+/,'/')
|
193
|
+
$LOG.debug("Mounting public directory #{dir.inspect} to path #{path.inspect}.")
|
194
|
+
uri(path, :handler => Mongrel::DirHandler.new(dir))
|
195
|
+
end
|
194
196
|
end
|
197
|
+
|
198
|
+
setup_signals
|
195
199
|
end
|
196
|
-
|
197
|
-
setup_signals
|
198
200
|
end
|
199
|
-
|
200
|
-
rescue Errno::EADDRINUSE
|
201
|
-
exit 1
|
202
|
-
end
|
203
|
-
|
204
|
-
mongrel.run
|
205
|
-
|
206
|
-
|
207
|
-
if $DAEMONIZE && $PID_FILE
|
208
|
-
write_pid_file
|
209
|
-
unless File.exists? $PID_FILE
|
210
|
-
$LOG.error "#{self} could not start because pid file #{$PID_FILE.inspect} could not be created."
|
201
|
+
rescue Errno::EADDRINUSE
|
211
202
|
exit 1
|
212
203
|
end
|
213
|
-
end
|
214
|
-
|
215
|
-
puts "\n** #{self} is running at http://#{ENV['HOSTNAME'] || 'localhost'}:#{Picnic::Conf.port}#{Picnic::Conf.uri_path} and logging to '#{Picnic::Conf.log[:file]}'"
|
216
204
|
|
217
205
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
206
|
+
mongrel.run
|
207
|
+
|
208
|
+
if $DAEMONIZE && $PID_FILE
|
209
|
+
write_pid_file
|
210
|
+
unless File.exists? $PID_FILE
|
211
|
+
$LOG.error "#{self} could not start because pid file #{$PID_FILE.inspect} could not be created."
|
212
|
+
exit 1
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
puts "\n** #{self} is running at http://#{ENV['HOSTNAME'] || 'localhost'}:#{Picnic::Conf.port}#{Picnic::Conf.uri_path} and logging to '#{Picnic::Conf.log[:file]}'"
|
217
|
+
|
218
|
+
|
219
|
+
self.prestart if self.respond_to? :prestart
|
220
|
+
mongrel.join
|
221
|
+
|
222
|
+
clear_pid_file
|
223
|
+
|
224
|
+
if mongrel.needs_restart
|
225
|
+
$LOG.info "#{self} is restarting..."
|
226
|
+
puts "\n** #{self} is restarting..."
|
227
|
+
else
|
228
|
+
$LOG.info "#{self} is stopped."
|
229
|
+
puts "\n** #{self} is stopped (#{Time.now})"
|
230
|
+
end
|
231
|
+
|
232
|
+
end while mongrel.needs_restart
|
224
233
|
end
|
225
234
|
|
226
235
|
# Theoretically this should launch your Picnic app as a FastCGI process.
|
@@ -247,6 +247,11 @@ module Picnic
|
|
247
247
|
end
|
248
248
|
|
249
249
|
def get_state
|
250
|
+
# FIXME: This is a poor attempt at trying to fix a problem where occassionally
|
251
|
+
# an empty pid_file is read, probably because it has not yet been
|
252
|
+
# fully written.
|
253
|
+
sleep 0.5
|
254
|
+
|
250
255
|
if File.exists? @options[:pid_file]
|
251
256
|
pid = File.read(@options[:pid_file]).strip
|
252
257
|
|
data/lib/picnic/version.rb
CHANGED
data/lib/picnic.rb
CHANGED
@@ -1,22 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
#require 'active_support'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
require 'active_support'
|
7
|
-
rescue LoadError
|
8
|
-
require 'rubygems'
|
9
|
-
gem 'activesupport', '>=2.0.2'
|
10
|
-
gem 'activerecord', '>=2.0.2'
|
11
|
-
require 'active_support'
|
12
|
-
end
|
13
|
-
end
|
4
|
+
$: << File.dirname(File.expand_path(__FILE__))+"/../vendor/camping-1.5.180/lib"
|
5
|
+
require "camping"
|
14
6
|
|
15
|
-
|
16
|
-
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require 'picnic/postambles'
|
7
|
+
$: << File.dirname(File.expand_path(__FILE__))
|
8
|
+
require "picnic/utils.rb"
|
9
|
+
require "picnic/conf.rb"
|
10
|
+
require "picnic/postambles.rb"
|
20
11
|
|
21
12
|
|
22
13
|
class Module
|
@@ -84,7 +75,7 @@ class Module
|
|
84
75
|
# your app's conf file.
|
85
76
|
#
|
86
77
|
def authenticate_using(mod)
|
87
|
-
|
78
|
+
load "picnic/authentication.rb"
|
88
79
|
mod = self::Authentication.const_get(mod.to_s.camelize) unless mod.kind_of? Module
|
89
80
|
|
90
81
|
$LOG.info("Enabling authentication for all requests using #{mod.inspect}.")
|
@@ -98,7 +89,7 @@ class Module
|
|
98
89
|
# Launches the web server to run your Picnic app.
|
99
90
|
# This method will continue to run as long as your server is running.
|
100
91
|
def start_picnic
|
101
|
-
require
|
92
|
+
require "#{File.dirname(File.expand_path(__FILE__))}/picnic/postambles.rb"
|
102
93
|
self.extend self::Postambles
|
103
94
|
|
104
95
|
if $PID_FILE && !(self::Conf.server.to_s == 'mongrel' || self::Conf.server.to_s == 'webrick')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picnic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zukowski
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-28 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: "0"
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: hoe
|