tayo 0.1.13 β 0.2.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 +4 -4
- data/CHANGELOG.md +67 -75
- data/README.md +77 -68
- data/lib/tayo/cli.rb +4 -4
- data/lib/tayo/commands/cf.rb +116 -162
- data/lib/tayo/commands/init.rb +35 -35
- data/lib/tayo/commands/proxy.rb +97 -0
- data/lib/tayo/proxy/cloudflare_client.rb +323 -0
- data/lib/tayo/proxy/docker_manager.rb +150 -0
- data/lib/tayo/proxy/network_config.rb +147 -0
- data/lib/tayo/proxy/traefik_config.rb +303 -0
- data/lib/tayo/proxy/welcome_service.rb +337 -0
- data/lib/tayo/version.rb +1 -1
- data/lib/templates/welcome/Dockerfile +14 -0
- data/lib/templates/welcome/index.html +173 -0
- metadata +24 -6
- data/CLAUDE.md +0 -58
- data/lib/tayo/commands/base.rb +0 -13
- data/lib/tayo/commands/sqlite.rb +0 -413
- data/scripts/setup_rubygems_key.sh +0 -60
data/lib/tayo/commands/sqlite.rb
DELETED
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'tayo/commands/base'
|
|
4
|
-
require 'git'
|
|
5
|
-
require 'colorize'
|
|
6
|
-
require 'tty-prompt'
|
|
7
|
-
|
|
8
|
-
module Tayo
|
|
9
|
-
module Commands
|
|
10
|
-
class Sqlite < Base
|
|
11
|
-
def execute
|
|
12
|
-
puts "\nποΈ SQLite νλ‘λμ
μ΅μ ν μ€μ μ μμν©λλ€...".colorize(:yellow)
|
|
13
|
-
puts "Tayo #{Tayo::VERSION}".colorize(:light_black)
|
|
14
|
-
|
|
15
|
-
unless in_rails_project?
|
|
16
|
-
puts "β Rails νλ‘μ νΈκ° μλλλ€. Rails νλ‘μ νΈ λ£¨νΈμμ μ€νν΄μ£ΌμΈμ.".colorize(:red)
|
|
17
|
-
exit 1
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
puts "\nμ΄ λͺ
λ Ήμ λ€μ μμ
μ μνν©λλ€:".colorize(:light_black)
|
|
21
|
-
puts " β’ database.ymlμ SQLite νλ‘λμ
μ΅μ ν μ€μ μΆκ°"
|
|
22
|
-
puts " β’ SQLite pragma μ΄κΈ°ν νμΌ μμ±"
|
|
23
|
-
puts " β’ SQLite μ€μ κ²μ¦ rake task μμ±"
|
|
24
|
-
puts " β’ SQLite νλ‘λμ
κ°μ΄λ λ¬Έμ μμ±"
|
|
25
|
-
|
|
26
|
-
prompt = TTY::Prompt.new
|
|
27
|
-
continue = prompt.yes?("\nκ³μνμκ² μ΅λκΉ?")
|
|
28
|
-
|
|
29
|
-
unless continue
|
|
30
|
-
puts "μ·¨μλμμ΅λλ€.".colorize(:yellow)
|
|
31
|
-
exit 0
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Git μν 체ν¬
|
|
35
|
-
git = Git.open('.')
|
|
36
|
-
unless git.status.changed.empty? && git.status.added.empty? && git.status.deleted.empty?
|
|
37
|
-
puts "\nβ οΈ μ»€λ°λμ§ μμ λ³κ²½μ¬νμ΄ μμ΅λλ€.".colorize(:yellow)
|
|
38
|
-
puts "SQLite μ€μ μ μ μ©νκΈ° μ μ νμ¬ μνλ₯Ό 컀λ°νλ κ²μ κΆμ₯ν©λλ€.".colorize(:light_black)
|
|
39
|
-
|
|
40
|
-
commit_now = prompt.yes?("\nμ§κΈ 컀λ°νμκ² μ΅λκΉ?")
|
|
41
|
-
if commit_now
|
|
42
|
-
git.add(all: true)
|
|
43
|
-
git.commit("νμ¬ μν μ μ₯ (tayo sqlite μ€ν μ )")
|
|
44
|
-
puts "β νμ¬ μνλ₯Ό 컀λ°νμ΅λλ€.".colorize(:green)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# database.yml μ
λ°μ΄νΈ
|
|
49
|
-
update_database_yml
|
|
50
|
-
|
|
51
|
-
# SQLite pragma μ΄κΈ°ν νμΌ μμ±
|
|
52
|
-
create_sqlite_pragma_initializer
|
|
53
|
-
|
|
54
|
-
# SQLite κ²μ¦ rake task μμ±
|
|
55
|
-
create_sqlite_check_rake_task
|
|
56
|
-
|
|
57
|
-
# SQLite κ°μ΄λ λ¬Έμ μμ±
|
|
58
|
-
create_sqlite_guide
|
|
59
|
-
|
|
60
|
-
# Git 컀λ°
|
|
61
|
-
begin
|
|
62
|
-
git.add('config/database.yml')
|
|
63
|
-
git.add('config/initializers/sqlite3_pragmas.rb')
|
|
64
|
-
git.add('lib/tasks/sqlite_check.rake')
|
|
65
|
-
git.add('sqlite_guide.md')
|
|
66
|
-
|
|
67
|
-
commit_message = <<~MSG
|
|
68
|
-
SQLite νλ‘λμ
μ΅μ ν μ€μ μΆκ°
|
|
69
|
-
|
|
70
|
-
- WAL λͺ¨λμ IMMEDIATE νΈλμμ
μΌλ‘ λμμ± λ¬Έμ ν΄κ²°
|
|
71
|
-
- busy_timeout 5μ΄ μ€μ μΌλ‘ SQLITE_BUSY μλ¬ λ°©μ§
|
|
72
|
-
- μΊμ λ° λ©λͺ¨λ¦¬ μ΅μ νλ‘ μ±λ₯ ν₯μ
|
|
73
|
-
- μ€μ κ²μ¦μ μν rake task μΆκ°
|
|
74
|
-
- μμΈ κ°μ΄λ λ¬Έμ ν¬ν¨
|
|
75
|
-
MSG
|
|
76
|
-
|
|
77
|
-
git.commit(commit_message)
|
|
78
|
-
puts "\nβ λ³κ²½μ¬νμ Gitμ 컀λ°νμ΅λλ€.".colorize(:green)
|
|
79
|
-
rescue => e
|
|
80
|
-
puts "\nβ οΈ Git μ»€λ° μ€ν¨: #{e.message}".colorize(:yellow)
|
|
81
|
-
puts "μλμΌλ‘ 컀λ°ν΄μ£ΌμΈμ.".colorize(:light_black)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
puts "\nβ
SQLite νλ‘λμ
μ΅μ ν μ€μ μ΄ μλ£λμμ΅λλ€!".colorize(:green)
|
|
85
|
-
puts "\nλ€μ λͺ
λ ΉμΌλ‘ μ€μ μ κ²μ¦ν μ μμ΅λλ€:".colorize(:light_black)
|
|
86
|
-
puts " rails db:sqlite_check".colorize(:cyan)
|
|
87
|
-
puts " rails db:sqlite_stats".colorize(:cyan)
|
|
88
|
-
puts "\nμμΈν λ΄μ©μ sqlite_guide.md νμΌμ μ°Έκ³ νμΈμ.".colorize(:light_black)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
def update_database_yml
|
|
94
|
-
puts "\nπ database.yml μ
λ°μ΄νΈ μ€...".colorize(:blue)
|
|
95
|
-
|
|
96
|
-
database_yml_path = 'config/database.yml'
|
|
97
|
-
unless File.exist?(database_yml_path)
|
|
98
|
-
puts "β config/database.yml νμΌμ μ°Ύμ μ μμ΅λλ€.".colorize(:red)
|
|
99
|
-
exit 1
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# λ°±μ
μμ±
|
|
103
|
-
backup_path = "#{database_yml_path}.backup"
|
|
104
|
-
FileUtils.cp(database_yml_path, backup_path)
|
|
105
|
-
puts " λ°±μ
μμ±: #{backup_path}".colorize(:light_black)
|
|
106
|
-
|
|
107
|
-
content = File.read(database_yml_path)
|
|
108
|
-
|
|
109
|
-
# SQLite μ΅μ ν μ€μ μΆκ°
|
|
110
|
-
optimized_content = add_sqlite_optimizations(content)
|
|
111
|
-
|
|
112
|
-
File.write(database_yml_path, optimized_content)
|
|
113
|
-
puts "β database.ymlμ΄ μ
λ°μ΄νΈλμμ΅λλ€.".colorize(:green)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def add_sqlite_optimizations(content)
|
|
117
|
-
# μ΄λ―Έ μ΅μ ν μ€μ μ΄ μλμ§ νμΈ
|
|
118
|
-
if content.include?('transaction_mode: IMMEDIATE')
|
|
119
|
-
puts " μ΄λ―Έ SQLite μ΅μ ν μ€μ μ΄ μ μ©λμ΄ μμ΅λλ€.".colorize(:yellow)
|
|
120
|
-
return content
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# production μΉμ
μ°ΎκΈ°
|
|
124
|
-
if content =~ /^production:\s*$/
|
|
125
|
-
# κΈ°μ‘΄ production μ€μ μ΄ λ¨μν κ²½μ°
|
|
126
|
-
if content =~ /^production:\s*\n\s+<<:\s*\*default/
|
|
127
|
-
# μλ‘μ΄ production μ€μ μΌλ‘ κ΅μ²΄
|
|
128
|
-
new_production = <<~YAML
|
|
129
|
-
production:
|
|
130
|
-
primary:
|
|
131
|
-
<<: *default
|
|
132
|
-
database: storage/production.sqlite3
|
|
133
|
-
transaction_mode: IMMEDIATE
|
|
134
|
-
pragmas:
|
|
135
|
-
journal_mode: WAL
|
|
136
|
-
synchronous: NORMAL
|
|
137
|
-
cache_size: 2000
|
|
138
|
-
journal_size_limit: 27103364
|
|
139
|
-
foreign_keys: ON
|
|
140
|
-
mmap_size: 134217728
|
|
141
|
-
busy_timeout: 5000
|
|
142
|
-
cache:
|
|
143
|
-
<<: *default
|
|
144
|
-
database: storage/production_cache.sqlite3
|
|
145
|
-
migrations_paths: db/cache_migrate
|
|
146
|
-
transaction_mode: IMMEDIATE
|
|
147
|
-
pragmas:
|
|
148
|
-
journal_mode: WAL
|
|
149
|
-
synchronous: NORMAL
|
|
150
|
-
cache_size: 2000
|
|
151
|
-
journal_size_limit: 27103364
|
|
152
|
-
foreign_keys: ON
|
|
153
|
-
mmap_size: 134217728
|
|
154
|
-
busy_timeout: 5000
|
|
155
|
-
queue:
|
|
156
|
-
<<: *default
|
|
157
|
-
database: storage/production_queue.sqlite3
|
|
158
|
-
migrations_paths: db/queue_migrate
|
|
159
|
-
transaction_mode: IMMEDIATE
|
|
160
|
-
pragmas:
|
|
161
|
-
journal_mode: WAL
|
|
162
|
-
synchronous: NORMAL
|
|
163
|
-
cache_size: 2000
|
|
164
|
-
journal_size_limit: 27103364
|
|
165
|
-
foreign_keys: ON
|
|
166
|
-
mmap_size: 134217728
|
|
167
|
-
busy_timeout: 5000
|
|
168
|
-
cable:
|
|
169
|
-
<<: *default
|
|
170
|
-
database: storage/production_cable.sqlite3
|
|
171
|
-
migrations_paths: db/cable_migrate
|
|
172
|
-
transaction_mode: IMMEDIATE
|
|
173
|
-
pragmas:
|
|
174
|
-
journal_mode: WAL
|
|
175
|
-
synchronous: NORMAL
|
|
176
|
-
cache_size: 2000
|
|
177
|
-
journal_size_limit: 27103364
|
|
178
|
-
foreign_keys: ON
|
|
179
|
-
mmap_size: 134217728
|
|
180
|
-
busy_timeout: 5000
|
|
181
|
-
YAML
|
|
182
|
-
|
|
183
|
-
content.sub!(/^production:\s*\n\s+<<:\s*\*default\s*\n\s+database:\s+storage\/production\.sqlite3/, new_production.chomp)
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
# default μΉμ
μ busy_timeout μΆκ°
|
|
188
|
-
unless content.include?('pragmas:')
|
|
189
|
-
content.sub!(/^(\s+timeout:\s+5000)/, "\\1\n pragmas:\n busy_timeout: 5000")
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
content
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def create_sqlite_pragma_initializer
|
|
196
|
-
puts "\nπ SQLite pragma μ΄κΈ°ν νμΌ μμ± μ€...".colorize(:blue)
|
|
197
|
-
|
|
198
|
-
initializer_path = 'config/initializers/sqlite3_pragmas.rb'
|
|
199
|
-
|
|
200
|
-
# consulteamμ sqlite3_pragmas.rb λ΄μ©
|
|
201
|
-
initializer_content = <<~RUBY
|
|
202
|
-
# SQLite3 νλ‘λμ
μ΅μ ν μ€μ
|
|
203
|
-
# database.ymlμ pragma μ€μ μ 보μνλ μΆκ° μ€μ
|
|
204
|
-
|
|
205
|
-
# ActiveRecordκ° μ°κ²°μ μ€μ ν λλ§λ€ μ€νλλλ‘ μ€μ
|
|
206
|
-
ActiveSupport.on_load(:active_record) do
|
|
207
|
-
if defined?(ActiveRecord::ConnectionAdapters::SQLite3Adapter)
|
|
208
|
-
# SQLite3Adapterμ configure_connection λ©μλ μ€λ²λΌμ΄λ
|
|
209
|
-
module SQLite3BusyTimeoutPatch
|
|
210
|
-
def configure_connection
|
|
211
|
-
super
|
|
212
|
-
# busy_timeoutμ νμ€νκ² μ€μ (λ°λ¦¬μ΄ λ¨μ)
|
|
213
|
-
if @raw_connection.respond_to?(:busy_timeout)
|
|
214
|
-
@raw_connection.busy_timeout(5000)
|
|
215
|
-
end
|
|
216
|
-
raw_execute("PRAGMA busy_timeout = 5000", "SCHEMA")
|
|
217
|
-
raw_execute("PRAGMA journal_size_limit = 27103364", "SCHEMA")
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
ActiveRecord::ConnectionAdapters::SQLite3Adapter.prepend(SQLite3BusyTimeoutPatch)
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
Rails.application.config.after_initialize do
|
|
226
|
-
ActiveRecord::Base.connection_pool.with_connection do |connection|
|
|
227
|
-
if connection.adapter_name == 'SQLite'
|
|
228
|
-
# κ°λ° νκ²½μμλ μ€μν μ€μ μ μ μ©
|
|
229
|
-
# SQLite3 gemμ busy_timeout λ©μλλ₯Ό μ§μ νΈμΆ
|
|
230
|
-
if connection.raw_connection.respond_to?(:busy_timeout)
|
|
231
|
-
connection.raw_connection.busy_timeout(5000)
|
|
232
|
-
else
|
|
233
|
-
connection.execute("PRAGMA busy_timeout = 5000")
|
|
234
|
-
end
|
|
235
|
-
connection.execute("PRAGMA journal_size_limit = 27103364")
|
|
236
|
-
|
|
237
|
-
if Rails.env.production?
|
|
238
|
-
# WAL λͺ¨λ νμΈ (database.ymlμμ μ΄λ―Έ μ€μ λμ΄ μμ΄μΌ ν¨)
|
|
239
|
-
result = connection.execute("PRAGMA journal_mode")
|
|
240
|
-
journal_mode = result.first["journal_mode"] rescue result.first.values.first
|
|
241
|
-
|
|
242
|
-
unless journal_mode.upcase == "WAL"
|
|
243
|
-
Rails.logger.warn "WARNING: SQLite is not in WAL mode. Production performance may be severely impacted."
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
# busy_timeout νμΈ
|
|
247
|
-
result = connection.execute("PRAGMA busy_timeout")
|
|
248
|
-
busy_timeout = result.first["busy_timeout"] rescue result.first.values.first
|
|
249
|
-
|
|
250
|
-
if busy_timeout.to_i < 5000
|
|
251
|
-
Rails.logger.warn "WARNING: SQLite busy_timeout is less than 5000ms. This may cause SQLITE_BUSY errors under load."
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
# μΆκ° μ΅μ ν μ€μ
|
|
255
|
-
connection.execute("PRAGMA temp_store = MEMORY")
|
|
256
|
-
connection.execute("PRAGMA optimize")
|
|
257
|
-
|
|
258
|
-
Rails.logger.info "SQLite production optimizations applied successfully"
|
|
259
|
-
Rails.logger.info "Journal mode: \#{journal_mode}, Busy timeout: \#{busy_timeout}ms"
|
|
260
|
-
end
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
# μ£ΌκΈ°μ μΈ μ΅μ ν μ€ν (μ νμ¬ν)
|
|
266
|
-
if Rails.env.production? && defined?(ActiveRecord::Base)
|
|
267
|
-
Thread.new do
|
|
268
|
-
loop do
|
|
269
|
-
sleep(4.hours)
|
|
270
|
-
begin
|
|
271
|
-
ActiveRecord::Base.connection_pool.with_connection do |connection|
|
|
272
|
-
if connection.adapter_name == 'SQLite'
|
|
273
|
-
connection.execute("PRAGMA optimize")
|
|
274
|
-
Rails.logger.info "SQLite PRAGMA optimize executed"
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
rescue => e
|
|
278
|
-
Rails.logger.error "Failed to run SQLite optimization: \#{e.message}"
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
end
|
|
282
|
-
end
|
|
283
|
-
RUBY
|
|
284
|
-
|
|
285
|
-
File.write(initializer_path, initializer_content)
|
|
286
|
-
puts "β #{initializer_path} νμΌμ΄ μμ±λμμ΅λλ€.".colorize(:green)
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
def create_sqlite_check_rake_task
|
|
290
|
-
puts "\nπ SQLite κ²μ¦ rake task μμ± μ€...".colorize(:blue)
|
|
291
|
-
|
|
292
|
-
# lib/tasks λλ ν 리 μμ±
|
|
293
|
-
FileUtils.mkdir_p('lib/tasks')
|
|
294
|
-
|
|
295
|
-
rake_task_path = 'lib/tasks/sqlite_check.rake'
|
|
296
|
-
|
|
297
|
-
# consulteamμ sqlite_check.rake λ΄μ©
|
|
298
|
-
rake_task_content = <<~RUBY
|
|
299
|
-
namespace :db do
|
|
300
|
-
desc "SQLite νλ‘λμ
μ€μ κ²μ¦"
|
|
301
|
-
task sqlite_check: :environment do
|
|
302
|
-
if ActiveRecord::Base.connection.adapter_name == 'SQLite'
|
|
303
|
-
puts "\\n=== SQLite νλ‘λμ
μ€μ κ²μ¦ ==="
|
|
304
|
-
|
|
305
|
-
connection = ActiveRecord::Base.connection
|
|
306
|
-
|
|
307
|
-
# κ° pragma μ€μ νμΈ
|
|
308
|
-
pragmas = {
|
|
309
|
-
'journal_mode' => 'WAL',
|
|
310
|
-
'synchronous' => 'NORMAL',
|
|
311
|
-
'cache_size' => '2000',
|
|
312
|
-
'journal_size_limit' => '27103364',
|
|
313
|
-
'foreign_keys' => '1',
|
|
314
|
-
'mmap_size' => '134217728',
|
|
315
|
-
'busy_timeout' => '5000'
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
all_good = true
|
|
319
|
-
|
|
320
|
-
pragmas.each do |pragma, expected|
|
|
321
|
-
result = connection.execute("PRAGMA \#{pragma}")
|
|
322
|
-
actual = result.first[pragma] rescue result.first.values.first
|
|
323
|
-
|
|
324
|
-
if pragma == 'foreign_keys'
|
|
325
|
-
status = actual.to_s == expected ? "β" : "β"
|
|
326
|
-
elsif pragma == 'journal_mode'
|
|
327
|
-
status = actual.to_s.upcase == expected ? "β" : "β"
|
|
328
|
-
elsif pragma == 'synchronous'
|
|
329
|
-
# NORMAL = 1 in SQLite
|
|
330
|
-
status = (actual.to_s == '1' || actual.to_s.upcase == expected) ? "β" : "β"
|
|
331
|
-
else
|
|
332
|
-
status = actual.to_s == expected ? "β" : "β"
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
puts "\#{status} \#{pragma.ljust(20)}: \#{actual} \#{status == 'β' ? "(μμκ°: \#{expected})" : ""}"
|
|
336
|
-
all_good = false if status == "β"
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
# transaction_mode νμΈ (Rails λ‘κ·Έμμλ§ νμΈ κ°λ₯)
|
|
340
|
-
puts "\\nμ°Έκ³ : transaction_mode=IMMEDIATE μ€μ μ λ°νμμμλ§ νμΈ κ°λ₯ν©λλ€."
|
|
341
|
-
|
|
342
|
-
if all_good
|
|
343
|
-
puts "\\nβ
λͺ¨λ SQLite νλ‘λμ
μ€μ μ΄ μ¬λ°λ₯΄κ² ꡬμ±λμμ΅λλ€!"
|
|
344
|
-
else
|
|
345
|
-
puts "\\nβ οΈ μΌλΆ μ€μ μ΄ κΆμ₯κ°κ³Ό λ€λ¦
λλ€. database.ymlμ νμΈνμΈμ."
|
|
346
|
-
end
|
|
347
|
-
else
|
|
348
|
-
puts "μ΄ νμ€ν¬λ SQLite λ°μ΄ν°λ² μ΄μ€μμλ§ μ¬μ© κ°λ₯ν©λλ€."
|
|
349
|
-
end
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
desc "SQLite μ±λ₯ ν΅κ³ νμΈ"
|
|
353
|
-
task sqlite_stats: :environment do
|
|
354
|
-
if ActiveRecord::Base.connection.adapter_name == 'SQLite'
|
|
355
|
-
puts "\\n=== SQLite μ±λ₯ ν΅κ³ ==="
|
|
356
|
-
|
|
357
|
-
connection = ActiveRecord::Base.connection
|
|
358
|
-
|
|
359
|
-
# λ°μ΄ν°λ² μ΄μ€ νμΌ ν¬κΈ°
|
|
360
|
-
db_path = connection.instance_variable_get(:@config)[:database]
|
|
361
|
-
if File.exist?(db_path)
|
|
362
|
-
size_mb = File.size(db_path) / 1024.0 / 1024.0
|
|
363
|
-
puts "λ°μ΄ν°λ² μ΄μ€ ν¬κΈ°: \#{'%.2f' % size_mb} MB"
|
|
364
|
-
|
|
365
|
-
# WAL νμΌ ν¬κΈ° νμΈ
|
|
366
|
-
wal_path = "\#{db_path}-wal"
|
|
367
|
-
if File.exist?(wal_path)
|
|
368
|
-
wal_size_mb = File.size(wal_path) / 1024.0 / 1024.0
|
|
369
|
-
puts "WAL νμΌ ν¬κΈ°: \#{'%.2f' % wal_size_mb} MB"
|
|
370
|
-
end
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
# νμ΄μ§ μ 보
|
|
374
|
-
result = connection.execute("PRAGMA page_count")
|
|
375
|
-
page_count = result.first.values.first
|
|
376
|
-
|
|
377
|
-
result = connection.execute("PRAGMA page_size")
|
|
378
|
-
page_size = result.first.values.first
|
|
379
|
-
|
|
380
|
-
puts "νμ΄μ§ μ: \#{page_count}"
|
|
381
|
-
puts "νμ΄μ§ ν¬κΈ°: \#{page_size} bytes"
|
|
382
|
-
|
|
383
|
-
# μΊμ ννΈμ¨ (λλ΅μ μΈ μΆμ )
|
|
384
|
-
result = connection.execute("PRAGMA cache_size")
|
|
385
|
-
cache_size = result.first.values.first
|
|
386
|
-
puts "μΊμ ν¬κΈ°: \#{cache_size} pages"
|
|
387
|
-
|
|
388
|
-
puts "\\nμ€μκ° μ±λ₯ λͺ¨λν°λ§μ μν΄μλ μ ν리μΌμ΄μ
λ‘κ·Έλ₯Ό νμΈνμΈμ."
|
|
389
|
-
else
|
|
390
|
-
puts "μ΄ νμ€ν¬λ SQLite λ°μ΄ν°λ² μ΄μ€μμλ§ μ¬μ© κ°λ₯ν©λλ€."
|
|
391
|
-
end
|
|
392
|
-
end
|
|
393
|
-
end
|
|
394
|
-
RUBY
|
|
395
|
-
|
|
396
|
-
File.write(rake_task_path, rake_task_content)
|
|
397
|
-
puts "β #{rake_task_path} νμΌμ΄ μμ±λμμ΅λλ€.".colorize(:green)
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
def create_sqlite_guide
|
|
401
|
-
puts "\nπ SQLite κ°μ΄λ λ¬Έμ μμ± μ€...".colorize(:blue)
|
|
402
|
-
|
|
403
|
-
guide_path = 'sqlite_guide.md'
|
|
404
|
-
|
|
405
|
-
# consulteamμ sqlite_guide.md λ΄μ©
|
|
406
|
-
guide_content = File.read('/Users/alfonso/projects/consulteam/sqlite_guide.md')
|
|
407
|
-
|
|
408
|
-
File.write(guide_path, guide_content)
|
|
409
|
-
puts "β #{guide_path} νμΌμ΄ μμ±λμμ΅λλ€.".colorize(:green)
|
|
410
|
-
end
|
|
411
|
-
end
|
|
412
|
-
end
|
|
413
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# RubyGems API ν€ μ€μ μ€ν¬λ¦½νΈ
|
|
4
|
-
|
|
5
|
-
echo "π RubyGems API ν€ μ€μ λμ°λ―Έ"
|
|
6
|
-
echo "================================"
|
|
7
|
-
echo ""
|
|
8
|
-
echo "μ΄ μ€ν¬λ¦½νΈλ RubyGems API ν€λ₯Ό μμ νκ² μ μ₯ν©λλ€."
|
|
9
|
-
echo ""
|
|
10
|
-
|
|
11
|
-
# μ΅μ
μ ν
|
|
12
|
-
echo "μ μ₯ λ°©λ²μ μ ννμΈμ:"
|
|
13
|
-
echo "1) ~/.gem/credentials (νμ€ λ°©λ²)"
|
|
14
|
-
echo "2) macOS Keychain (κ°μ₯ μμ )"
|
|
15
|
-
echo "3) λ λ€"
|
|
16
|
-
echo ""
|
|
17
|
-
read -p "μ ν (1-3): " choice
|
|
18
|
-
|
|
19
|
-
# API ν€ μ
λ ₯
|
|
20
|
-
echo ""
|
|
21
|
-
read -s -p "RubyGems API ν€λ₯Ό μ
λ ₯νμΈμ: " api_key
|
|
22
|
-
echo ""
|
|
23
|
-
|
|
24
|
-
case $choice in
|
|
25
|
-
1)
|
|
26
|
-
# credentials νμΌμ μ μ₯
|
|
27
|
-
mkdir -p ~/.gem
|
|
28
|
-
echo "---" > ~/.gem/credentials
|
|
29
|
-
echo ":rubygems_api_key: $api_key" >> ~/.gem/credentials
|
|
30
|
-
chmod 0600 ~/.gem/credentials
|
|
31
|
-
echo "β
~/.gem/credentialsμ μ μ₯λμμ΅λλ€."
|
|
32
|
-
;;
|
|
33
|
-
2)
|
|
34
|
-
# Keychainμ μ μ₯
|
|
35
|
-
security add-generic-password -a "$USER" -s "rubygems-api-key" -w "$api_key" -U
|
|
36
|
-
echo "β
macOS Keychainμ μ μ₯λμμ΅λλ€."
|
|
37
|
-
;;
|
|
38
|
-
3)
|
|
39
|
-
# λ λ€
|
|
40
|
-
mkdir -p ~/.gem
|
|
41
|
-
echo "---" > ~/.gem/credentials
|
|
42
|
-
echo ":rubygems_api_key: $api_key" >> ~/.gem/credentials
|
|
43
|
-
chmod 0600 ~/.gem/credentials
|
|
44
|
-
security add-generic-password -a "$USER" -s "rubygems-api-key" -w "$api_key" -U
|
|
45
|
-
echo "β
λ κ³³ λͺ¨λμ μ μ₯λμμ΅λλ€."
|
|
46
|
-
;;
|
|
47
|
-
*)
|
|
48
|
-
echo "β μλͺ»λ μ νμ
λλ€."
|
|
49
|
-
exit 1
|
|
50
|
-
;;
|
|
51
|
-
esac
|
|
52
|
-
|
|
53
|
-
echo ""
|
|
54
|
-
echo "π μ€μ μ΄ μλ£λμμ΅λλ€!"
|
|
55
|
-
echo ""
|
|
56
|
-
echo "μ΄μ λ€μ λͺ
λ ΉμΌλ‘ gemμ λ°°ν¬ν μ μμ΅λλ€:"
|
|
57
|
-
echo " rake release"
|
|
58
|
-
echo ""
|
|
59
|
-
echo "λλ Keychainμμ ν€λ₯Ό μ¬μ©νλ €λ©΄:"
|
|
60
|
-
echo " GEM_HOST_API_KEY=\$(security find-generic-password -a \"$USER\" -s \"rubygems-api-key\" -w) rake release"
|