-
Notifications
You must be signed in to change notification settings - Fork 29
/
cli_cdweb.rb
143 lines (120 loc) · 3.6 KB
/
cli_cdweb.rb
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# -*- coding: utf-8 -*-
require 'rubygems'
require 'rack'
require 'launchy'
require 'optparse'
require 'milkode/cdweb/lib/database'
module Rack
class Server
def start
if options[:warn]
$-w = true
end
if includes = options[:include]
$LOAD_PATH.unshift(*includes)
end
if library = options[:require]
require library
end
if options[:debug]
$DEBUG = true
require 'pp'
p options[:server]
pp wrapped_app
pp app
end
# Touch the wrapped app, so that the config.ru is loaded before
# daemonization (i.e. before chdir, etc).
wrapped_app
daemonize_app if options[:daemonize]
write_pid if options[:pid]
trap(:INT) do
if server.respond_to?(:shutdown)
server.shutdown
else
exit
end
end
server.run wrapped_app, options do
if (options[:LaunchBrowser])
host = options[:Host] || options[:BindAddress] # options[:BindAddress] for WEBrick
Launchy.open("http://#{host}:#{options[:Port]}")
end
end
end
end
end
module Milkode
class CLI_Cdweb
def self.execute(stdout, argv)
options = {
:environment => ENV['RACK_ENV'] || "development",
:pid => nil,
:Port => 9292,
:Host => "0.0.0.0",
:AccessLog => [],
:config => "config.ru",
# ----------------------------
:server => "thin",
:LaunchBrowser => true,
:DbDir => select_dbdir,
}
opts = OptionParser.new("#{File.basename($0)}")
opts.on('--db DB_DIR', 'Database dir (default : current_dir)') {|v| options[:DbDir] = v }
opts.on("-o", "--host HOST", "listen on HOST (default: 0.0.0.0)") {|host| options[:Host] = host }
opts.on('-p', '--port PORT', 'use PORT (default: 9292)') {|v| options[:Port] = v }
opts.on("-s", "--server SERVER", "serve using SERVER (default : thin)") {|s| options[:server] = s }
opts.on('-n', '--no-browser', 'No launch browser.') {|v| options[:LaunchBrowser] = false }
opts.on('--customize', 'Create customize file.') {|v| options[:customize] = true }
# --hostが'-h'を上書きするので、'-h'を再定義してあげる
opts.on_tail("-h", "-?", "--help", "Show this message") do
puts opts
exit
end
opts.parse!(argv)
# 実行!!
execute_with_options(options)
end
def self.execute_with_options(stdout, options)
dbdir = File.expand_path(options[:DbDir])
unless options[:customize]
# 使用するデータベースの位置設定
Database.setup(dbdir)
# サーバースクリプトのある場所へ移動
FileUtils.cd(File.dirname(__FILE__))
# Rackサーバー起動
Rack::Server.start(options)
else
create_customize_file(dbdir)
end
end
def self.select_dbdir
if (Dbdir.dbdir?('.') || !Dbdir.dbdir?(Dbdir.default_dir))
'.'
else
Dbdir.default_dir
end
end
def self.create_customize_file(dbdir)
fname = File.join(dbdir, "milkweb.yaml")
if File.exist? fname
puts "Already exist '#{fname}'"
else
puts <<EOF
Create '#{fname}'.
Please customize yaml parameter.
EOF
File.open(fname, "w") do |f|
f.write <<EOF
---
:home_title : "Milkode"
:home_icon : "/images/MilkodeIcon135.png"
:header_title: "Milkode"
:header_icon : "/images/MilkodeIcon135.png"
:display_about_milkode: true
EOF
end
end
end
end
end