#=============================================================================== # run create_core_data.sh in setup dir against recent db clone & 'git push origin' # on deployment server, 'git pull origin' and run this script with '-c' arg and # optional --no-data to skip core_data entry # create config/settings/. dir with idle_timeout.yml & local_addr.yml # create config/settings/.txt & css/local/.css # symlink resources/menu/local/request_forms & file_uploads # new init.d/lims_fastcgi_; add to init.d/restart-lims # configure fastcgi socket in apache2/default & Alias in apache2/default-ssl # ensure 'view' definer user exists in users table eg raj@localhost vs raj@% #=============================================================================== use FindBin qw($Bin); use Modern::Perl; use Getopt::Long; use Config::Auto; use Data::Dumper; use DBI; my $skip_data = 0; # optional flag my $db_name; # required GetOptions ( "centre|c=s" => \$db_name, # string "no-data" => \$skip_data, # flag ) or die("Error in command line arguments\n"); # warn $skip_data; $db_name || die 'name of db to drop & re-create is required'; # warn $db_name; exit; print "WARNING: db '$db_name' will be dropped & re-created. Type 'yes' to proceed ... "; chomp( my $ok = ); # say $ok; unless ( $ok eq 'yes' ) { say 'aborting'; exit; } # say 'proceeding'; exit; my $src = "$Bin/../setup/core_data.gz"; # data source # change name of central lab in new_centre.sql: my $sql = "$Bin/../setup/new_centre.sql"; # minimum data set (user = raj; etc) my $dsn = 'dbi:mysql:hilis4'; my $zcat = '/bin/zcat'; use vars qw($SQL_FOR_TABLE $FOREIGN_KEYS $VIEWS); require "$Bin/../setup/lims.sql"; # provides $SQL_FOR_TABLE & $FOREIGN_KEYS use lib "$Bin/../lib"; # warn $Bin; exit; # for Config::Auto to find L::L::Utils my $cfg = Config::Auto::parse("$Bin/../config/lims_config.pl", format => 'perl'); # warn Dumper $cfg; # exit; my $admin_user = $cfg->{settings}{admin_db_user}; # warn $admin_user; my $admin_pwd = $cfg->{settings}{admin_db_pwd}; # warn $admin_pwd; my $dbh = DBI->connect( $dsn, $admin_user, $admin_pwd, # views need SUPER priviledges { RaiseError => 1, PrintError => 0 } ); $dbh->do($_) for ( qq!DROP DATABASE IF EXISTS `$db_name`!, qq!CREATE DATABASE `$db_name`!, qq!USE `$db_name`!, ); # tables (not views): print "tables: ...............................\n"; foreach ( sort keys %$SQL_FOR_TABLE ) { # skip views - need all tables to exist: # next if $_ =~ /_view\Z/; # moved to own section print $_, "\n"; $dbh->do( qq!DROP TABLE IF EXISTS $_! ); $dbh->do( $SQL_FOR_TABLE->{$_} ); } # views: print "views: ...............................\n"; foreach ( sort keys %$VIEWS ) { # do views last: # next unless $_ =~ /_view\Z/; # in own section now print $_, "\n"; $dbh->do( qq!DROP VIEW IF EXISTS $_! ); $dbh->do( $VIEWS->{$_} ); } # FK's: print "foreign keys: ...............................\n"; foreach my $fk( sort keys %$FOREIGN_KEYS ) { print $fk, "\n"; $dbh->do($FOREIGN_KEYS->{$fk}); } $dbh->disconnect; # data: if ( $skip_data ) { say 'skipping core data entry'; } else { print "data: ...............................\n"; system "$zcat $src | mysql $db_name -u $admin_user -p$admin_pwd"; system "mysql -u $admin_user -p$admin_pwd $db_name < $sql"; }