fontana_client_support 0.5.7 → 0.6.0

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
- N2E5MGJjNmMwN2EzNmRiNjExZWIzNzUzNTBjYjdlYTQyYmUxZjdhNw==
4
+ ZDBlMGI3YjhjYjljODhjN2IzNTUxZDkxMDA2M2QwOGYwOTlmNzBhZA==
5
5
  data.tar.gz: !binary |-
6
- ZmFkNzgzOGQ0ZWVjNjkyMDYzYzZkYTFhNjdkNDVhYzRlNGRjMzdjMQ==
6
+ OGZlMDU4YTQzZDFmZTc1ZWQyMTA5YzdlZWQxODMxZTUxOTViZTQ1MQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZjUzY2FiODUzYzQ0Y2IzNTcyYWNkZjhmMjMyNjYyNTE5Y2Y2ODJmOGE4YjYz
10
- NDRhNzljN2U2Y2RlY2E5ZDBhYWQ4NDBjNjMyMDZiYjk0YTAxOTA2Nzk3MGI2
11
- YzM5ZTJmMTFiMjFkODQ3Yzc4ZWU3Mzc3NTAyNmVjYTgyNzVhYzY=
9
+ ODVkYWNlMzMxOGZkYzAzZTRhMjA5MjQ3MzM4MTI2MzI4MWUwMDhlYjkyNDRm
10
+ YTRlZDNmOGU4MjYxMjE2YTIxYzAxNmJiZWUwZWZjOTVjYmNkZTQ5MmQyN2Y2
11
+ NzcyZmU3ZTU3OTJkODgxZDRkNTgyNmQzYzFkYWQ3MTRjOGNhODM=
12
12
  data.tar.gz: !binary |-
13
- YTlkZmUwM2MyNTI1YWM0YWRkOTVmMWVjNTZmNjk5NjIxZDU1NWIyYWFlZWNh
14
- YWVjMDU5NzgyODViYzE5OThkNjBhOWIyNzI2MjExYzM4NDkyMzQyMzc2YTZh
15
- ODg3ZGZkMjVlNTQ2N2JlMzE0NDNmOWE1ODBjMWU1NWMzYmIzNjM=
13
+ MzQzZWMyZjhiMDc1ODc5ODU2N2I4NzM2NTE0MzRlYTIzMWE4YjdkM2M1ZWEz
14
+ YmVjOTZlM2VkNDJjNzc3ODIwZjRjOGFjODliZWZiMjUyOTI5NTcyMDllZjc1
15
+ ZmY1OTc1Mjc0NzI3NWQ0MWY3MzA0ZTgxNTIwN2RiZjI2NmJlMjI=
data/lib/fontana.rb CHANGED
@@ -29,15 +29,14 @@ module Fontana
29
29
  @env ||= (ENV["FONTANA_ENV"] || "DEVELOPMENT").to_sym
30
30
  end
31
31
 
32
- def version
33
- unless @version
34
- @version = ENV['FONTANA_VERSION' ]
35
- unless @version
36
- path = File.expand_path("FONTANA_VERSION", FontanaClientSupport.root_dir)
37
- @version = File.read(path).strip if File.readable?(path)
38
- end
39
- end
40
- @version
32
+ # これは fontanaの Fontana.app_mode と同じ動きをすることが期待されています。
33
+ # https://github.com/tengine/fontana/blob/master/config/application.rb#L47
34
+ def app_mode
35
+ (ENV["FONTANA_APP_MODE"] || "development").to_sym # production development test
36
+ end
37
+
38
+ def app_mode=(value)
39
+ ENV["FONTANA_APP_MODE"] = value
41
40
  end
42
41
 
43
42
  end
@@ -1,10 +1,37 @@
1
1
  require 'fontana'
2
+ require 'fileutils'
3
+ require "shellwords"
2
4
 
3
5
  module Fontana
4
6
  module CommandUtils
5
7
 
6
8
  module_function
7
9
 
10
+ def system_at_vendor_fontana!(cmd, &block)
11
+ FileUtils::Verbose.chdir(FontanaClientSupport.vendor_fontana) do
12
+ return system!(cmd, &block)
13
+ end
14
+ end
15
+
16
+ def spawn_at_vendor_fontana(env, cmd, options = {})
17
+ options = { chdir: FontanaClientSupport.vendor_fontana }.update(options)
18
+ env = env.each_with_object({}){|(k,v), d| d[k.to_s] = v.to_s }
19
+ puts "now spawning:\n env: #{env.inspect}\n cmd: #{cmd.inspect}\n options: #{options.inspect}"
20
+ pid = spawn(env, cmd, options)
21
+ puts "spawning suceeded pid: #{pid.inspect}"
22
+ Process.detach(pid)
23
+ return pid
24
+ end
25
+
26
+ def spawn_at_vendor_fontana_with_sweeper(*args)
27
+ pid = spawn_at_vendor_fontana(*args)
28
+ at_exit{
29
+ puts "Now killing #{pid}"
30
+ Process.kill("INT", pid)
31
+ }
32
+ pid
33
+ end
34
+
8
35
  def system!(cmd)
9
36
  puts "now executing: #{cmd}"
10
37
 
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'fontana_client_support'
3
+
4
+ namespace :app_mode do
5
+
6
+ desc "show app_mode"
7
+ task :show do
8
+ puts Fontana.app_mode.inspect
9
+ end
10
+
11
+ # 以下に:productionがありませんが、rakeタスクでproductionに設定することは想定できないので、敢えて作っていません。
12
+
13
+ desc "set app_mode test"
14
+ task :test do
15
+ Fontana.app_mode = "test"
16
+ end
17
+
18
+ desc "set app_mode development"
19
+ task :development do
20
+ Fontana.app_mode = "development"
21
+ end
22
+
23
+ end
24
+
25
+ task :app_model => :"app_mode:show"
@@ -20,6 +20,9 @@ namespace :deploy do
20
20
 
21
21
  desc "fetch, checkout, build app_seed and migrate."
22
22
  fontana_task :update
23
+
24
+ desc "db:drop, db:seed, build app_seed and migrate."
25
+ fontana_task :reset_db
23
26
  end
24
27
 
25
28
  end
@@ -20,6 +20,9 @@ namespace :deploy do
20
20
 
21
21
  desc "update runtime + app_seed:build_from_runtime + migrate."
22
22
  fontana_task :update, before: runtime_source
23
+
24
+ desc "db:drop, db:seed, app_seed:build_from_runtime + migrate."
25
+ fontana_task :reset_db
23
26
  end
24
27
 
25
28
  end
@@ -1,27 +1,157 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'fontana_client_support'
2
- include Fontana::ServerRake
3
3
 
4
+ require 'timeout'
5
+
6
+ include Fontana::CommandUtils
4
7
  extend Fontana::RakeUtils
5
8
 
6
- namespace_with_fontana :server, :libgss_test do
9
+ def build_env_str(env)
10
+ env.each_with_object([]){|(k,v), d|
11
+ d << "#{k.to_s}=#{v.to_s}"
12
+ }.join(" ")
13
+ end
14
+
15
+ {
16
+ development: {http_port: 3000, https_port: 3001 },
17
+ test: {http_port: 4000, https_port: 4001 },
18
+ }.each do |app_mode, config|
19
+ namespace app_mode.to_sym do
20
+
21
+ pid_dir = File.join(FontanaClientSupport.vendor_fontana, "tmp/pids")
22
+
23
+ namespace :server do
24
+ http_env = {FONTANA_APP_MODE: app_mode, BUNDLE_GEMFILE: "Gemfile-LibgssTest" }
25
+ https_env = http_env.merge(HTTPS_PORT: config[:https_port])
26
+
27
+ http_env_str = build_env_str(http_env)
28
+ https_env_str = build_env_str(https_env)
29
+
30
+ desc "update VersionSet entries' versions and copy collections"
31
+ task(:update_version_set_entries) do
32
+ if ENV["GSS_VERSION_SET_FIXTURE_FILEPATH"]
33
+ system_at_vendor_fontana!(http_env_str + " rake version_set:update_entry_versions")
34
+ end
35
+ end
36
+
37
+ http_base_cmd = "bundle exec rails server -p #{config[:http_port]}"
38
+ http_fg_cmd = "#{http_env_str} #{http_base_cmd}"
39
+ http_bg_cmd = "#{http_env_str} #{http_base_cmd} -d -P #{pid_dir}/#{app_mode}_http_server.pid"
40
+
41
+ # HTTPSのポートは script/secure_rails の内部で ENV['HTTPS_PORT'] を参照しています
42
+ https_base_cmd = "bundle exec script/secure_rails server webrick"
43
+ https_fg_cmd = "#{https_env_str} #{https_base_cmd}"
44
+ https_bg_cmd = "#{https_env_str} #{https_base_cmd} -d -P #{pid_dir}/#{app_mode}_https_server.pid"
45
+
46
+ {
47
+ launch_http_server: http_fg_cmd,
48
+ launch_http_server_daemon: http_bg_cmd,
49
+ launch_https_server: https_fg_cmd,
50
+ launch_https_server_daemon: https_bg_cmd,
51
+ }.each do |name, cmd|
52
+ task(name){ system_at_vendor_fontana!(cmd) }
53
+ end
54
+
55
+ task_sequential :launch_server_daemons, [
56
+ :"#{app_mode}:server:update_version_set_entries",
57
+ :"#{app_mode}:server:launch_http_server_daemon",
58
+ :"#{app_mode}:server:launch_https_server_daemon"
59
+ ]
60
+
61
+ spawn_env = {FONTANA_APP_MODE: app_mode, BUNDLE_GEMFILE: "Gemfile-LibgssTest" }
62
+ task(:spawn_http_server){ spawn_at_vendor_fontana_with_sweeper(http_env, http_base_cmd, out: "/dev/null") }
63
+ task(:spawn_https_server){ spawn_at_vendor_fontana_with_sweeper(https_env, https_base_cmd, out: "/dev/null") }
64
+
65
+ task_sequential :spawn_servers, [
66
+ :"#{app_mode}:server:update_version_set_entries",
67
+ :"#{app_mode}:server:spawn_http_server",
68
+ :"#{app_mode}:server:spawn_https_server"
69
+ ]
70
+
71
+ {
72
+ http: config[:http_port],
73
+ https: config[:https_port],
74
+ }.each do |name, port|
75
+
76
+ task(:"error_on_#{name}_listened") do
77
+ lsof = `lsof -i:#{port}`
78
+ if lsof =~ /LISTEN/
79
+ raise "\e[31mAnother server is already running on #{port}. Stop it in order to run new server.\n#{lsof}\e[0m"
80
+ end
81
+ end
82
+
83
+ task(:"wait_to_listen_#{name}") do
84
+ timeout((ENV["WAIT_TO_LISTEN"] || 120).to_i) do
85
+ while true
86
+ break if `lsof -i:#{port}` =~ /LISTEN/
87
+ sleep(0.2)
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ desc "error on ports listened by some server"
94
+ task :error_on_ports_listened => [
95
+ :error_on_http_listened,
96
+ :error_on_https_listened,
97
+ ]
98
+
99
+ desc "wait to listen ports"
100
+ task :wait_to_listen_ports => [
101
+ :wait_to_listen_http,
102
+ :wait_to_listen_https,
103
+ ]
104
+
105
+ end
106
+
107
+ namespace :servers do
108
+ desc "start #{app_mode} HTTP+HTTPS server daemons" if app_mode == :test
109
+ task :start => :"#{app_mode}:server:launch_server_daemons"
110
+
111
+ desc "stop #{app_mode} HTTP+HTTPS server daemons" if app_mode == :test
112
+ task :stop => :"#{app_mode}:servers:shutdown_server_daemons"
113
+
114
+ desc "stop #{app_mode} HTTP+HTTPS server daemons when process exit" if app_mode == :test
115
+ task :stop_on_exit do
116
+ at_exit{ Rake::Task["test:servers:stop"].execute }
117
+ end
118
+
119
+ desc "restart #{app_mode} HTTP+HTTPS server daemons" if app_mode == :test
120
+ task_sequential(:restart, [:"#{app_mode}:servers:stop", :"#{app_mode}:servers:start"])
121
+
122
+ # desc "shutdown server daemons"
123
+ task :shutdown_server_daemons do
124
+ Dir.glob(File.join(pid_dir, "#{app_mode}_*.pid")) do |pid_path|
125
+ pid = `cat #{pid_path}`.strip
126
+ system!("kill -INT #{pid}")
127
+ end
128
+ end
129
+
130
+ desc "check #{app_mode} daemon alive"
131
+ task :check_daemon_alive do
132
+ pids = Dir.glob(File.join(pid_dir, "#{app_mode}_*.pid")).to_a
133
+ unless pids.empty?
134
+ msg = "\e[31mdaemons seems to be still alive! #{pids.inspect}\n"
135
+ cmd = "ps " + pids.map{|pid| "-p `cat #{pid}`" }.join(" ")
136
+ msg << `#{cmd}`
137
+ msg << "\n You can stop these daemons by using `rake test:servers:stop`"
138
+ msg << "\e[0m"
139
+ raise msg
140
+ end
141
+ end
142
+ end
7
143
 
8
- fontana_task :launch_http_server
9
- fontana_task :launch_http_server_daemon
10
- fontana_task :launch_https_server
11
- fontana_task :launch_https_server_daemon
12
- fontana_task :launch_server_daemons
13
- fontana_task :shutdown_server_daemons
14
- fontana_task :check_daemon_alive
144
+ end
15
145
  end
16
146
 
17
147
 
18
148
  namespace :servers do
19
- desc "start HTTP+HTTPS server daemons"
20
- task :start => :"server:launch_server_daemons"
149
+ desc "start development HTTP+HTTPS server daemons"
150
+ task :start => :"development:servers:start"
21
151
 
22
- desc "stop HTTP+HTTPS server daemons"
23
- task :stop => :"server:shutdown_server_daemons"
152
+ desc "stop development HTTP+HTTPS server daemons"
153
+ task :stop => :"development:servers:stop"
24
154
 
25
- desc "restart HTTP+HTTPS server daemons"
26
- task_sequential(:restart, [:"servers:stop", :"servers:start"])
155
+ desc "restart development HTTP+HTTPS server daemons"
156
+ task :restart => :"development:servers:restart"
27
157
  end
@@ -1,14 +1,14 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'fontana_client_support'
3
- include Fontana::ServerRake
3
+
4
+ extend Fontana::RakeUtils
4
5
 
5
6
  desc "Run RSpec with server_daemons"
6
- task :spec_with_server_daemons => [:"vendor:fontana:prepare"] do
7
- Rake::Task["server:launch_server_daemons"].execute
8
- begin
9
- sleep( (ENV["FONTANA_LAUNCH_SLEEP"] || 5).to_i ) # 実際にポートをLINSTENするまで待つ
10
- Rake::Task["spec"].execute
11
- ensure
12
- Rake::Task["server:shutdown_server_daemons"].execute
13
- end
14
- end
7
+ task_sequential :spec_with_server_daemons, [
8
+ :"app_mode:test",
9
+ :"test:server:error_on_ports_listened",
10
+ :"vendor:fontana:prepare",
11
+ :"test:server:spawn_servers",
12
+ :"test:server:wait_to_listen_ports",
13
+ :spec
14
+ ]
@@ -15,12 +15,13 @@ namespace :vendor do
15
15
  fileutils.rm_rf(d) if Dir.exist?(d)
16
16
  end
17
17
 
18
- # 動的に決まるタスクを静的に扱えるようにタスクを定義します
19
- task :deploy_reset do
20
- Rake::Task["deploy:#{FontanaClientSupport.deploy_strategy}:reset"].delegate
21
- end
22
- task :deploy_update do
23
- Rake::Task["deploy:#{FontanaClientSupport.deploy_strategy}:update"].delegate
18
+ case FontanaClientSupport.deploy_strategy
19
+ when :scm then
20
+ task :deploy_reset => :"deploy:scm:reset"
21
+ task :deploy_update => :"deploy:scm:update"
22
+ when :sync then
23
+ task :deploy_reset => :"deploy:sync:reset"
24
+ task :deploy_update => :"deploy:sync:update"
24
25
  end
25
26
 
26
27
  task_sequential :setup, [
@@ -37,11 +38,7 @@ namespace :vendor do
37
38
  system!("git clone #{Fontana.repo_url} vendor/fontana")
38
39
  end
39
40
  fileutils.chdir(FontanaClientSupport.vendor_fontana) do
40
- if Fontana.version
41
- system!("git checkout master && git reset --hard #{Fontana.version}")
42
- else
43
- system!("git checkout #{Fontana.branch}")
44
- end
41
+ system!("git checkout #{Fontana.branch}")
45
42
  end
46
43
  end
47
44
 
@@ -68,6 +65,7 @@ namespace :vendor do
68
65
 
69
66
  task_sequential :update, [
70
67
  :"vendor:fontana:fetch_and_checkout",
68
+ :"vendor:fontana:configs",
71
69
  :"vendor:fontana:bundle_install",
72
70
  :"vendor:fontana:db_drop",
73
71
  :"vendor:fontana:deploy_update",
@@ -93,6 +91,8 @@ namespace :vendor do
93
91
  name = Dir.exist?(FontanaClientSupport.vendor_fontana) ? "update" : "reset"
94
92
  Rake::Task["vendor:fontana:#{name}"].delegate
95
93
  end
94
+
95
+
96
96
  end
97
97
 
98
98
  end
@@ -1,3 +1,3 @@
1
1
  module FontanaClientSupport
2
- VERSION = "0.5.7"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontana_client_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - akima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-30 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -106,6 +106,7 @@ files:
106
106
  - lib/fontana_client_support.rb
107
107
  - lib/fontana_client_support/config_server.rb
108
108
  - lib/fontana_client_support/tasks.rb
109
+ - lib/fontana_client_support/tasks/app_mode.rake
109
110
  - lib/fontana_client_support/tasks/config_server.rake
110
111
  - lib/fontana_client_support/tasks/deploy/scm.rake
111
112
  - lib/fontana_client_support/tasks/deploy/sync.rake