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
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/vae.rb', line 77
def run!
options = { :port => 9999 }
ARGV.options do |opts|
opts.banner = BANNER + "\n\nUsage: vae [options]\n starts a local development server\n vae [options] deploy\n promotes the source in Subversion repository to the FTP\n\n If you are using the Vae Production environment features:\n vae [options] stage\n promotes the source in Subversion repository to the staging environment\n vae [options] stagerelease\n promotes the source in Subversion repository to the staging environment\n and releases it to the production environment\n vae [options] release\n releases the current staging environment to the production environment\n vae [options] rollback\n rolls back the production environment to a previous release\n\nAvailable Options:"
opts.on("-u","--username <username>","Your Vae username") { |o| options[:username] = o }
opts.on("-p","--port <port number>","Start server on this port") { |o| options[:port] = o }
opts.on("-r","--root <path to site root>","Path to the root of the local copy of your Vae site.") { |o| options[:site_root] = o }
opts.on("-s","--site <subdomain>","Vae subdomain for this site") { |o| options[:site] = o }
opts.on_tail("-h","--help", "Show this help message") { puts opts; exit }
opts.parse!
end
options[:site_root] = Dir.pwd if options[:site_root].nil? and (File.exists?("#{Dir.pwd}/__vae.yml") or File.exists?("#{Dir.pwd}/__verb.yml"))
if options[:site_root]
[ "verb", "vae" ].each do |name|
if File.exists?("#{options[:site_root]}/__#{name}.yml")
site_conf_file = File.read("#{options[:site_root]}/__#{name}.yml")
site_conf = YAML.load(site_conf_file)
options[:site] = site_conf[name]["site"] if site_conf[name] and site_conf[name]["site"]
end
end
end
raise VaeError, "We could not determine the Vae subdomain for this site. Please specify it manually by using the --site option or create a __vae.yml file within the site root." if options[:site].nil?
unless options[:username]
svn_credentials = get_svn_credentials(options[:site])
options[:username] = svn_credentials["username"]
options[:password] = svn_credentials["password"]
end
raise VaeError, "We could not determine the Vae username that you use. Please specify it manually by using the --username option." if options[:username].nil?
if options[:password].nil?
options[:password] = ask("Please enter the Vae password for username #{options[:username]}:") {|q| q.echo = false}
end
if [ "deploy", "release", "rollback", "stage", "stagerelease" ].include?(ARGV.last)
stagerelease(ARGV.last, options[:site], options[:username], options[:password])
exit
end
raise VaeError, "You did not specify the path to the root of the local copy of your Vae site. Please specify it manually by using the --root option or cd to the site root (and make sure it contains a __vae.yml file)." unless options[:site_root]
raise VaeError, "You specified an invalid path to the local copy of your Vae site." unless File.exists?(options[:site_root])
$biglock = Mutex.new
dw = DirectoryWatcher.new options[:site_root], :interval => 1.0, :glob => SERVER_PARSED_GLOB, :pre_load => true, :logger => DirectoryWatcher::NullLogger.new
dw.add_observer { |*args|
args.each { |event|
path = event.path.gsub($site.root, "")
$biglock.synchronize {
$changed[path] = event.type
}
}
}
dw.start
set_mime_types
Dir.chdir File.dirname(__FILE__)
puts BANNER
puts "Vae is in action at http://localhost:#{options[:port]}/"
puts " (hit Control+C to exit)"
$site = Site.new(:subdomain => options[:site], :root => options[:site_root], :username => options[:username], :password => options[:password])
$cache = {}
$changed = {}
$server = Mongrel::Configurator.new :host => "0.0.0.0", :port => options[:port] do
listener do
uri "/", :handler => VaeSiteServlet.new
end
trap("INT") { raise Mongrel::StopServer }
run
end
begin
$server.join
rescue Mongrel::StopServer
puts "Thanks for using Vae!"
end
end
|