registrar si falló la compilación. no colgar la io.
This commit is contained in:
parent
1d8eda67a9
commit
f3ed882ca4
3 changed files with 34 additions and 14 deletions
|
@ -43,29 +43,43 @@ class Deploy < ApplicationRecord
|
|||
@gems_dir ||= Rails.root.join('_storage', 'gems', site.name)
|
||||
end
|
||||
|
||||
# Corre un comando y devuelve true si terminó correctamente
|
||||
# rubocop:disable Metrics/MethodLength
|
||||
# Corre un comando, lo registra en la base de datos y devuelve el
|
||||
# estado.
|
||||
#
|
||||
# @param [String]
|
||||
# @return [Boolean]
|
||||
def run(cmd)
|
||||
# XXX: prestar atención a la concurrencia de sqlite3, se podría
|
||||
# enviar los datos directamente a una API para que se manejen desde
|
||||
# el proceso principal de rails y evitar problemas.
|
||||
stat = build_stats.build action: cmd.split(' -', 2).first.tr(' ', '_')
|
||||
r = nil
|
||||
lines = []
|
||||
|
||||
time_start
|
||||
Dir.chdir(site.path) do
|
||||
Open3.popen2e(env, cmd, unsetenv_others: true) do |_, o, t|
|
||||
r = t.value
|
||||
stat.log = o.read
|
||||
# XXX: Tenemos que leer línea por línea porque en salidas largas
|
||||
# se cuelga la IO
|
||||
# TODO: Enviar a un websocket para ver el proceso en vivo?
|
||||
o.each do |line|
|
||||
lines << line
|
||||
end
|
||||
end
|
||||
end
|
||||
time_stop
|
||||
|
||||
stat.seconds = time_spent_in_seconds
|
||||
stat.bytes = size
|
||||
stat.save
|
||||
build_stats.create action: readable_cmd(cmd),
|
||||
log: lines.join,
|
||||
seconds: time_spent_in_seconds,
|
||||
bytes: size,
|
||||
status: r&.success?
|
||||
|
||||
r&.success?
|
||||
end
|
||||
# rubocop:enable Metrics/MethodLength
|
||||
|
||||
private
|
||||
|
||||
# @param [String]
|
||||
# @return [String]
|
||||
def readable_cmd(cmd)
|
||||
cmd.split(' -', 2).first.tr(' ', '_')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,8 +57,6 @@ class DeployLocal < Deploy
|
|||
{
|
||||
'HOME' => home_dir,
|
||||
'PATH' => paths.join(':'),
|
||||
'SPREE_API_KEY' => site.tienda_api_key,
|
||||
'SPREE_URL' => site.tienda_url,
|
||||
'AIRBRAKE_PROJECT_ID' => site.id.to_s,
|
||||
'AIRBRAKE_PROJECT_KEY' => site.airbrake_api_key,
|
||||
'JEKYLL_ENV' => Rails.env,
|
||||
|
@ -94,7 +92,7 @@ class DeployLocal < Deploy
|
|||
end
|
||||
|
||||
def jekyll_build
|
||||
run %(bundle exec jekyll build --trace --destination "#{escaped_destination}")
|
||||
run %(bundle exec jekyll build --trace --profile --destination "#{escaped_destination}")
|
||||
end
|
||||
|
||||
# no debería haber espacios ni caracteres especiales, pero por si
|
||||
|
|
8
db/migrate/20210414152728_add_status_to_build_stats.rb
Normal file
8
db/migrate/20210414152728_add_status_to_build_stats.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Registra el estado de las compilaciones
|
||||
class AddStatusToBuildStats < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
add_column :build_stats, :status, :boolean, default: false
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue