bizside 2.0.4 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b01c25b82f7e799120dfb307b7a1ef14e24bc32cc518f2c7fabe6cc84c843987
4
- data.tar.gz: f1e3f4ad2264d5105b2661368290a3483d456b96d60c5a5ffc8cf27308131fd6
3
+ metadata.gz: f00dba55e99db77fad3ddfe68afb706b89fe3bdc718ad774613309c3bebb7d7e
4
+ data.tar.gz: 16be628bb79ff1689956d1f63f0895559775531b74d80270d7edb6239ef9abf3
5
5
  SHA512:
6
- metadata.gz: e13784ada4cf0e8a8a70358529bcd1782787db4861adccbe8dc89cd57e17b42370071741e138b47b1515b0bb125e7846668c6cc4e08aac962a249f9e86a5d6aa
7
- data.tar.gz: abcb24b074417f8d90a04c6f80e9024a9ae6cb91cb9dc44ff197628ccc5234865b362d51037a604a933c59883475fc3e88cb4a519b727db1f0d668add4fb96db
6
+ metadata.gz: a2c0f432bd5d53b537f9db6b3a7f28a9f0c747b9eb0a49ec0838ec02ecfbdedc902d36bda002581d82cbaf5513f0177d5ac57fa229604fde0516bf729b1df9fb
7
+ data.tar.gz: b28b49b0f10c14bedf018a61d938465de5a95d4a8884a9721bf25291c08eec807e2017bad15d6d1594a4f0c82c971b3d70ee1d63502ad94ace3a6000f9ff54ea
@@ -25,7 +25,7 @@ module Bizside
25
25
 
26
26
  ret
27
27
  end
28
-
28
+
29
29
  def []=(key, value)
30
30
  value = self.class.new(value) if value.is_a?(Hash)
31
31
  @hash[key.to_s] = value
@@ -52,8 +52,10 @@ module Bizside
52
52
  def method_missing(name, *args)
53
53
  ret = self[name]
54
54
 
55
- if ret.is_a?(Hash) and not args[0].nil?
56
- ret = args[0]
55
+ if ret.is_a?(Hash) || ret.is_a?(::Bizside::Config)
56
+ unless args[0].nil?
57
+ ret = self[name] = args[0]
58
+ end
57
59
  end
58
60
 
59
61
  ret
@@ -4,12 +4,7 @@ require_relative 'carrierwave'
4
4
  require_relative 'uploader/extension_whitelist'
5
5
  require_relative 'uploader/filename_validator'
6
6
  require_relative 'uploader/content_type_validator'
7
-
8
- if defined?(Rails) && Rails.application.class.parent_name.eql?('BizsideTestApp')
9
- # not require 'uploader/exif'
10
- else
11
- require_relative 'uploader/exif'
12
- end
7
+ require_relative 'uploader/exif'
13
8
 
14
9
  module Bizside
15
10
  # === storage.yml
@@ -45,6 +40,21 @@ module Bizside
45
40
  Bizside.config.storage.fog? ? downloaded_file_from_fog(file.path) : file.path
46
41
  end
47
42
 
43
+ # ファイル名の長さチェックが可能なように
44
+ def cache!(new_file = sanitized_file)
45
+ begin
46
+ super
47
+ rescue Errno::ENAMETOOLONG => e
48
+ if Bizside.config.file_uploader.ignore_long_filename_error?
49
+ if self.model.respond_to?(:original_filename)
50
+ self.model.original_filename = filename
51
+ end
52
+ else
53
+ raise e
54
+ end
55
+ end
56
+ end
57
+
48
58
  private
49
59
 
50
60
  def downloaded_file_from_fog(path)
@@ -47,6 +47,41 @@ module Bizside
47
47
  end
48
48
  end
49
49
 
50
+ def self.enqueue_at_with_queue(queue, time, klass, *args)
51
+ if Bizside.rails_env&.test?
52
+ if klass.respond_to?(:before_enqueue)
53
+ return unless klass.before_enqueue(*args)
54
+ end
55
+
56
+ Bizside.logger.info "テスト時には遅延ジョブの登録を行わず、即時実行します。"
57
+ klass.perform(*args)
58
+ return
59
+ end
60
+
61
+ if block_given?
62
+ yield
63
+ else
64
+ Bizside.logger.info "遅延ジョブ #{klass} を #{queue} に登録します。"
65
+ end
66
+
67
+ ::Resque.enqueue_at_with_queue(queue, time, klass, *args)
68
+ end
69
+
70
+ def self.enqueue_at_with_queue_silently(queue, time, klass, *args)
71
+ enqueue_at_with_queue(queue, time, klass, *args) do
72
+ # 何も出力しない
73
+ end
74
+ end
75
+
76
+ def self.remove_delayed_in_queue(klass, queue, *args)
77
+ if Bizside.rails_env&.test?
78
+ Rails.logger.info "テスト時には遅延ジョブのキャンセルを行いません。"
79
+ return
80
+ end
81
+
82
+ ::Resque.remove_delayed_in_queue(klass, queue, *args)
83
+ end
84
+
50
85
  def self.set_job_at(time, klass, *args)
51
86
  if Bizside.rails_env&.test?
52
87
  if klass.respond_to?(:before_enqueue)
@@ -121,6 +121,7 @@ module Resque
121
121
  info = {
122
122
  time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
123
123
  add_on_name: Bizside.config.add_on_name,
124
+ server_address: hostname,
124
125
  class: payload['class'],
125
126
  args: payload['args'].to_s,
126
127
  queue: queue,
@@ -132,6 +133,19 @@ module Resque
132
133
  info
133
134
  end
134
135
 
136
+ # ホスト名を取得。
137
+ #
138
+ # 下記理由から hostname(1) を使用:
139
+ #
140
+ # * job 実行環境では環境変数 HOSTNAME がセットされていないケースがある
141
+ # (例: 通常の god 起動の場合。他方、container 起動の場合は
142
+ # HOSTNAME がセットされている模様)。
143
+ # * hostname(1) は Linux Standard Base 共通コマンドのため必ず存在する。
144
+ # @see https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Common/LSB-Common/rcommands.html
145
+ def hostname
146
+ @hostname ||= (`hostname`.chomp rescue '(unknown)')
147
+ end
148
+
135
149
  end
136
150
  end
137
151
  end
@@ -0,0 +1,161 @@
1
+ module Bizside
2
+ module Resque
3
+ end
4
+ end
5
+
6
+ require 'resque'
7
+ require 'resque/worker'
8
+ require 'resque/failure/base'
9
+ require 'resque/failure/multiple'
10
+ require 'resque/failure/redis'
11
+ require_relative 'audit/job_logger'
12
+
13
+ {
14
+ yaml: ['config/resque.yml', 'config/redis.yml'],
15
+ json: ['config/resque.json', 'config/redis.json']
16
+ }.each do |format, file_candidates|
17
+ file_candidates.each do |file|
18
+ resque_file = File.join(File.expand_path(ENV['RAILS_ROOT'] || '.'), file)
19
+ next unless File.exist?(resque_file)
20
+
21
+ resque_config = ERB.new(File.read(resque_file), 0, '-').result
22
+
23
+ case format
24
+ when :yaml
25
+ Resque.redis = YAML.load(resque_config)[Bizside.env]
26
+ break
27
+ when :json
28
+ Resque.redis = ActiveSupport::JSON.decode(resque_config)[Bizside.env]
29
+ break
30
+ else
31
+ raise "不正なResque設定ファイルです。#{file}"
32
+ end
33
+ end
34
+ end
35
+
36
+ Resque.redis.namespace = "resque:#{Bizside.config.add_on_name}:#{Bizside.env}"
37
+
38
+ if defined?(Resque::Scheduler)
39
+ Resque::Scheduler.dynamic = true
40
+ end
41
+
42
+ # tmp/stop.txt が存在する場合は一時停止する
43
+ module Resque
44
+ class Worker
45
+
46
+ alias_method :reserve_without_stop_txt, :reserve
47
+
48
+ def reserve
49
+ stop_file_path = File.join('tmp', 'stop.txt')
50
+ if File.exist?(stop_file_path)
51
+ puts "#{Resque.redis.namespace} #{stop_file_path} が存在するため一時停止します。"
52
+ nil
53
+ else
54
+ reserve_without_stop_txt
55
+ end
56
+ end
57
+
58
+ end
59
+ end
60
+
61
+ # resque-webのエラーメッセージ文字化けに対するパッチ
62
+ module Resque
63
+ module Failure
64
+ class Redis
65
+
66
+ def save
67
+ data = {
68
+ :failed_at => UTF8Util.clean(Time.now.strftime("%Y/%m/%d %H:%M:%S %Z")),
69
+ :payload => payload,
70
+ :exception => exception.class.to_s,
71
+ :error => exception.to_s, #UTF8Util.clean(exception.to_s), UTF8Util.cleanを呼ぶと文字化けする
72
+ :backtrace => filter_backtrace(Array(exception.backtrace)),
73
+ :worker => worker.to_s,
74
+ :queue => queue
75
+ }
76
+ data = Resque.encode(data)
77
+ Resque.redis.rpush(:failed, data)
78
+ end
79
+
80
+ end
81
+ end
82
+ end
83
+
84
+ # エラーをログに出力
85
+ module Resque
86
+ module Failure
87
+ class LogOutput < Base
88
+ def save
89
+ Bizside.logger.error [
90
+ "[FATAL] Resque #{queue}:#{worker}",
91
+ "#{payload}",
92
+ "#{exception.class} #{exception.to_s}",
93
+ "#{Array(exception.backtrace).join("\n")}"
94
+ ].join("\n")
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ # エラーをLTSV形式で専用ログに出力
101
+ module Resque
102
+ module Failure
103
+ class JobAuditLog < Base
104
+
105
+ def save
106
+ dump_env
107
+ info = build_loginfo
108
+ return info if Bizside.rails_env&.test?
109
+
110
+ logger.record(info)
111
+
112
+ info
113
+ end
114
+
115
+ private
116
+
117
+ def logger
118
+ @logger ||= Bizside::Audit::JobLogger.logger
119
+ end
120
+
121
+ def build_loginfo
122
+ info = {
123
+ time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
124
+ add_on_name: Bizside.config.add_on_name,
125
+ server_address: hostname,
126
+ class: payload['class'],
127
+ args: payload['args'].to_s,
128
+ queue: queue,
129
+ worker: worker.to_s,
130
+ exception: exception.class,
131
+ exception_message: exception.to_s,
132
+ exception_backtrace: Array(exception.backtrace)[0..10].join("\n") # Get only the top 10 because there are many traces.
133
+ }
134
+ info
135
+ end
136
+
137
+
138
+ def dump_env
139
+ File.open('/tmp/resque-dump.log', 'a') do |f|
140
+ f.puts('== begin')
141
+ for k, v in ENV do
142
+ f.printf("%30s %s\n", k, v)
143
+ end
144
+ f.puts('')
145
+ end
146
+ end
147
+
148
+ # hostname(1) からホスト名を取得。
149
+ #
150
+ # job 実行環境(コンテナ等)では環境変数(HOSTNAME等)にホスト名はセットされていない。
151
+ def hostname
152
+ @hostname ||= (`hostname`.chomp rescue '(unknown)')
153
+ end
154
+
155
+ end
156
+ end
157
+ end
158
+
159
+ Resque::Failure::Multiple.configure do |multi|
160
+ multi.classes = [Resque::Failure::Redis, Resque::Failure::LogOutput, Resque::Failure::JobAuditLog]
161
+ end
@@ -0,0 +1,154 @@
1
+ module Bizside
2
+ module Resque
3
+ end
4
+ end
5
+
6
+ require 'resque'
7
+ require 'resque/worker'
8
+ require 'resque/failure/base'
9
+ require 'resque/failure/multiple'
10
+ require 'resque/failure/redis'
11
+ require_relative 'audit/job_logger'
12
+
13
+ {
14
+ yaml: ['config/resque.yml', 'config/redis.yml'],
15
+ json: ['config/resque.json', 'config/redis.json']
16
+ }.each do |format, file_candidates|
17
+ file_candidates.each do |file|
18
+ resque_file = File.join(File.expand_path(ENV['RAILS_ROOT'] || '.'), file)
19
+ next unless File.exist?(resque_file)
20
+
21
+ resque_config = ERB.new(File.read(resque_file), 0, '-').result
22
+
23
+ case format
24
+ when :yaml
25
+ Resque.redis = YAML.load(resque_config)[Bizside.env]
26
+ break
27
+ when :json
28
+ Resque.redis = ActiveSupport::JSON.decode(resque_config)[Bizside.env]
29
+ break
30
+ else
31
+ raise "不正なResque設定ファイルです。#{file}"
32
+ end
33
+ end
34
+ end
35
+
36
+ Resque.redis.namespace = "resque:#{Bizside.config.add_on_name}:#{Bizside.env}"
37
+
38
+ if defined?(Resque::Scheduler)
39
+ Resque::Scheduler.dynamic = true
40
+ end
41
+
42
+ # tmp/stop.txt が存在する場合は一時停止する
43
+ module Resque
44
+ class Worker
45
+
46
+ alias_method :reserve_without_stop_txt, :reserve
47
+
48
+ def reserve
49
+ stop_file_path = File.join('tmp', 'stop.txt')
50
+ if File.exist?(stop_file_path)
51
+ puts "#{Resque.redis.namespace} #{stop_file_path} が存在するため一時停止します。"
52
+ nil
53
+ else
54
+ reserve_without_stop_txt
55
+ end
56
+ end
57
+
58
+ end
59
+ end
60
+
61
+ # resque-webのエラーメッセージ文字化けに対するパッチ
62
+ module Resque
63
+ module Failure
64
+ class Redis
65
+
66
+ def save
67
+ data = {
68
+ :failed_at => UTF8Util.clean(Time.now.strftime("%Y/%m/%d %H:%M:%S %Z")),
69
+ :payload => payload,
70
+ :exception => exception.class.to_s,
71
+ :error => exception.to_s, #UTF8Util.clean(exception.to_s), UTF8Util.cleanを呼ぶと文字化けする
72
+ :backtrace => filter_backtrace(Array(exception.backtrace)),
73
+ :worker => worker.to_s,
74
+ :queue => queue
75
+ }
76
+ data = Resque.encode(data)
77
+ Resque.redis.rpush(:failed, data)
78
+ end
79
+
80
+ end
81
+ end
82
+ end
83
+
84
+ # エラーをログに出力
85
+ module Resque
86
+ module Failure
87
+ class LogOutput < Base
88
+ def save
89
+ Bizside.logger.error [
90
+ "[FATAL] Resque #{queue}:#{worker}",
91
+ "#{payload}",
92
+ "#{exception.class} #{exception.to_s}",
93
+ "#{Array(exception.backtrace).join("\n")}"
94
+ ].join("\n")
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ # エラーをLTSV形式で専用ログに出力
101
+ module Resque
102
+ module Failure
103
+ class JobAuditLog < Base
104
+
105
+ def save
106
+ info = build_loginfo
107
+ return info if Bizside.rails_env&.test?
108
+
109
+ logger.record(info)
110
+
111
+ info
112
+ end
113
+
114
+ private
115
+
116
+ def logger
117
+ @logger ||= Bizside::Audit::JobLogger.logger
118
+ end
119
+
120
+ def build_loginfo
121
+ info = {
122
+ time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
123
+ add_on_name: Bizside.config.add_on_name,
124
+ server_address: hostname,
125
+ class: payload['class'],
126
+ args: payload['args'].to_s,
127
+ queue: queue,
128
+ worker: worker.to_s,
129
+ exception: exception.class,
130
+ exception_message: exception.to_s,
131
+ exception_backtrace: Array(exception.backtrace)[0..10].join("\n") # Get only the top 10 because there are many traces.
132
+ }
133
+ info
134
+ end
135
+
136
+ # ホスト名を取得。
137
+ #
138
+ # 下記理由から hostname(1) を使用:
139
+ #
140
+ # * job 実行環境では環境変数 HOSTNAME がセットされていないケースがある
141
+ # (例: 通常の god 起動の場合。他方、container 起動の場合は
142
+ # HOSTNAME がセットされている模様)。
143
+ # * hostname(1) は Linux Standard Base 共通コマンドのため必ず存在する。
144
+ def hostname
145
+ @hostname ||= (`hostname`.chomp rescue '(unknown)')
146
+ end
147
+
148
+ end
149
+ end
150
+ end
151
+
152
+ Resque::Failure::Multiple.configure do |multi|
153
+ multi.classes = [Resque::Failure::Redis, Resque::Failure::LogOutput, Resque::Failure::JobAuditLog]
154
+ end
@@ -1,3 +1,3 @@
1
1
  module Bizside
2
- VERSION = '2.0.4'
2
+ VERSION = '2.0.7'
3
3
  end
@@ -0,0 +1,3 @@
1
+ module Bizside
2
+ VERSION = '2.0.6.1'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bizside
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - bizside-developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-05 00:00:00.000000000 Z
11
+ date: 2022-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -419,6 +419,8 @@ files:
419
419
  - lib/bizside/railtie.rb
420
420
  - lib/bizside/record_has_warnings.rb
421
421
  - lib/bizside/resque.rb
422
+ - lib/bizside/resque.rb.bkp
423
+ - lib/bizside/resque.rb~
422
424
  - lib/bizside/rsync.rb
423
425
  - lib/bizside/safe_pty.rb
424
426
  - lib/bizside/shib_utils.rb
@@ -441,6 +443,7 @@ files:
441
443
  - lib/bizside/user_agent/controller_helper.rb
442
444
  - lib/bizside/validations.rb
443
445
  - lib/bizside/version.rb
446
+ - lib/bizside/version.rb~
444
447
  - lib/bizside/view_helper.rb
445
448
  - lib/bizside/warning.rb
446
449
  - lib/bizside/yes.rb
@@ -479,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
479
482
  - !ruby/object:Gem::Version
480
483
  version: '0'
481
484
  requirements: []
482
- rubygems_version: 3.2.16
485
+ rubygems_version: 3.2.29
483
486
  signing_key:
484
487
  specification_version: 4
485
488
  summary: Bizside is an utilities for web application.