fontana_client_support 0.5.7 → 0.6.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.
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