Fast media syncing.

master
Manager Bot 3 years ago
parent 98528e5a10
commit 8cef7d4b42
  1. 9
      Web/lib/MJB/Web.pm
  2. 4
      Web/lib/MJB/Web/Controller/Dashboard.pm
  3. 31
      Web/lib/MJB/Web/Task/SyncBlogMedia.pm

@ -39,6 +39,14 @@ sub startup ($self) {
$blog->create_related( 'builds', { job_id => $build_job_id } );
});
$self->helper( sync_blog_media => sub ( $c, $blog ) {
my $build_job_id = $c->minion->enqueue( 'sync_blog_media', [ $blog->id ], {
notes => { '_bid_' . $blog->id => 1 },
priority => $blog->build_priority,
});
$blog->create_related( 'builds', { job_id => $build_job_id } );
});
# Minion plugin & tasks
$self->plugin( Minion => { Pg => $self->config->{database}->{minion} } );
@ -46,6 +54,7 @@ sub startup ($self) {
$self->minion->add_task( purge_blog => 'MJB::Web::Task::PurgeBlog' );
$self->minion->add_task( deploy_blog => 'MJB::Web::Task::DeployBlog' );
$self->minion->add_task( sync_blog => 'MJB::Web::Task::SyncBlog' );
$self->minion->add_task( sync_blog_media => 'MJB::Web::Task::SyncBlogMedia' );
# SSL cert related jobs.
$self->minion->add_task( create_ssl_cert => 'MJB::Web::Task::CreateSSLCert' );

@ -199,7 +199,7 @@ sub do_blog_media_remove( $c ) {
$jekyll->remove_file( $media_file->to_string, "Removed media file" . $media_file->basename );
}
$c->deploy_blog( $blog );
$c->sync_blog_media( $blog );
$c->flash( confirmation => "Removed " . $media_file->basename );
$c->redirect_to( $c->url_for( 'show_dashboard_blog_media', { id => $blog->id } ) );
@ -224,7 +224,7 @@ sub do_blog_media ( $c ) {
"Add media " . $upload->filename
);
$c->deploy_blog( $blog );
$c->sync_blog_media( $blog );
$c->flash( confirmation => "Uploaded file!" );
$c->redirect_to( $c->url_for( 'show_dashboard_blog_media', { id => $blog->id } ) );

@ -0,0 +1,31 @@
package MJB::Web::Task::SyncBlogMedia;
use Mojo::Base 'MJB::Web::Task', -signatures;
use Mojo::File qw( curfile );
use File::Copy::Recursive qw( dircopy );
use IPC::Run3;
sub run ( $job, $blog_id ) {
$job->note( _mds_template => 'build_static' );
my $build_dir = $job->checkout_repo( $blog_id );
my $blog = $job->app->db->blog( $blog_id );
$job->note( is_clone_complete => 1 );
# Show the user the commit we're on.
$job->system_command( [ 'git', '-C', $build_dir->child('src')->to_string, 'log', '-1' ] );
$job->note( is_build_complete => 1 );
my $domain = $blog->domain->name;
foreach my $host ( qw( root@web-west.myjekyllblog.net root@web-east.myjekyllblog.net ) ) {
$job->system_command( [ qw( rsync -vrLptgoD --delete -e ), 'ssh -o StrictHostKeyChecking=no', $build_dir->child('src')->child('assets')->to_string . "/", "$host:/var/www/$domain/html/assets" ] );
}
$job->note( is_deploy_complete => 1 );
$job->finish( );
}
1;
Loading…
Cancel
Save