泣きながら書いたのでメモ。
- Railsのログから
INSERT
とUPDATE
を抜き出して実行します。他は不要だったので手をつけていません。
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter:'sqlite3',
database:'target.sqlite3'
)
def execute_with_params(sql, params = [])
sql = ActiveRecord::Base.send(:sanitize_sql_array, [sql, *params.to_h.values])
ActiveRecord::Base.connection.execute(sql)
end
while line = gets&.gsub(/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/, '')
case line
when /INSERT/
turai = line.scan(/^., \[.+\] DEBUG -- : SQL \(.+\) (.+VALUES \(.+\)) (.+)$/).flatten
sql = turai[0]
params = eval(turai[1])
execute_with_params(sql, params)
when /UPDATE/
turai = line.scan(/^., \[.+\] DEBUG -- : SQL \(.+\) (.+) (.+)$/).flatten
sql = turai[0]
params = eval(turai[1])
execute_with_params(sql, params)
else
end
end