# create folder for subversion repositories
$ mkdir /var/subversion
# create the subversion repository
$ svnadmin create /var/subversion/project
$ cat pre-commit.tmpl | egrep -iv "(^#|^$)"
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || exit 1
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
exit 0
[1] REPOS-PATH (the path to this repository)
[2] TXN-NAME (the name of the txn about to be committed)
#!/bin/bash
/var/www/vhosts/project.vm/scripts/svn-pre-commit.php "$1" "$2"
$ chmod ug+w pre-commit
#!/usr/bin/php
<?php
// get args
$repo = $argv[1];
// define path to mysql backups
$mysql_backups_path = '/var/www/vhosts/project.vm/database';
// define path to drupal docroot
$drupal_docroot_path = '/var/www/vhosts/project.vm/htdocs';
// get changed path
// example output:
// A tags/20110503/
$svn_look = `svnlook changed $repo`;
// define pattern to break apart svnlook changed
$pattern = '/^\s*([A-Za-z])\s*(.*)$/';
// execute preg match
preg_match($pattern, $svn_look, $matches);
$svn_action = $matches[1];
$svn_changed_path = $matches[2];
// check if a tag is being created
if ($svn_action == 'A' && substr($svn_changed_path, 0, 5)=='tags/') {
// get tag name
$exploded = explode('/', $svn_changed_path);
$tag_name = $exploded[1];
// change dir to drupal docroot
chdir($drupal_docroot_path);
// backup mysql database using drush
`/var/www/drush/drush sql-dump > {$mysql_backups_path}/tag_{$tag_name}.sql`;
}
$ chmod ug+w svn-pre-commit.php
$ svn cp file:///var/subversion/project/trunk file:///var/subversion/project/tags/beta-0.1 -m "creating beta 0.1 tag"
$ cd /var/www/vhosts/project.vm/database
$ ls -1
tag_beta-0.1.sql
<?php
// check if this is web traffic, versus CLI
if (isset($_SERVER['HTTP_USER_AGENT'])) {
header('HTTP/1.1 403 Forbidden');
die('You are not authorized to access this page.');
}
// set environment variables:
// remove time limit of script
set_time_limit(0);
// increase memory usage
ini_set('memory_limit', '256M');
// ensure script is being executed from Drupal docroot
$docroot_path = dirname($_SERVER['SCRIPT_NAME']);
if (getcwd() != $docroot_path) {
chdir($docroot_path);
}
// set bootstrap variables:
// these lines ensure multi-site environments will work with a bootstrap
$_SERVER['HTTP_HOST'] = 'www.myhostname.com';
$_SERVER['SCRIPT_NAME'] = '/' . basename(__file__);
// include Drupal bootstrap
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// check for custom module and cron hook
if (!module_exists(array('MYMODULE')) || !function_exists('MYMODULE_cron')) {
die('Module is not enabled.');
}
// execute custom cron hook
MYMODULE_cron();
?>
$ crontab -e
# file contents:
#min hour dayMonth month dayWeek command
0 0 * * * /usr/bin/php /path/to/drupal/docroot/cron.custom.php
Premature end of script headers: index.php
<?php
// store original working directory
define('ORIGINAL_DIRECTORY', getcwd());
// define site http host
define('HTTP_HOST','pics.ericlondon.com');
// get imagecache presets data
$presets_data = imagecache_presets();
// loop through presets data and collect preset names
$presets = array();
foreach ($presets_data as $key => $value) {
$presets[] = $value['presetname'];
}
// get a list of pictures
chdir(file_directory_path());
// NOTE: the following line uses find, grep, and sed to generate a list of image files.
// It will vary depending on which file extensions to include and which directories to ignore
$command = 'find . -type f | egrep -i "\.(gif|jpeg|jpg|png)$" | sed "s/^\.\///" | egrep -iv "^(imagecache|imagefield_thumbs)\/"';
$output = `$command`;
$files = explode("\n", trim($output));
chdir(ORIGINAL_DIRECTORY);
// loop through file list
foreach ($files as $file) {
// loop through each preset
foreach ($presets as $preset) {
// define url
$url = 'http://' . HTTP_HOST . '/' . file_directory_path() . '/imagecache/' . $preset . '/' . $file;
// request url
$http_request_data = drupal_http_request($url);
// log entry
$log_entry = $http_request_data->code . " " . $http_request_data->status_message . " " . $url;
file_put_contents('ic_preset_log.txt', $log_entry . "\n", FILE_APPEND);
}
}
?>
drush scr generate_presets.php
$ tail ic_preset_log.txt
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/large_landscape/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/large_portrait/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/medium/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/medium_landscape/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/medium_portrait/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/thumbnail/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/thumbnail_landscape/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/thumbnail_portrait/userpics/10020/118_1881.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/large/userpics/10020/2007_07_21_003.JPG
200 OK http://pics.ericlondon.com/sites/ericlondon.com/files/imagecache/large_landscape/userpics/10020/2007_07_21_003.JPG
select language, domain
from {languages}
language domain
de http://de.ericlondon.com
en http://www.ericlondon.com
es http://es.ericlondon.com
fr http://fr.ericlondon.com
<?php
// ensure this script is being called from Drush ONLY
// ensure HTTP_HOST is being used
if (
!is_array($_SERVER['argv'])
|| substr($_SERVER['argv'][0], -9) != 'drush.php'
|| substr($_SERVER['SCRIPT_FILENAME'], -9) != 'drush.php'
|| !strlen($_SERVER['HTTP_HOST'])
) {
header('HTTP/1.1 403 Forbidden');
die('Access Denied.');
}
$output = "";
// fetch hostname from globals
$http_host = $_SERVER['HTTP_HOST'];
// ensure http host exists
if (!$http_host || !is_string($http_host)) {
die('Error occurred fetching http host.');
}
// set default http host
$default_http_host = 'www.' . $http_host;
// define default language
$default_language = 'en';
// define SQL to fetch default language
$sql = "
select *
from {languages}
where language = '%s'
";
// execute SQL
$default_language_record = db_fetch_object(db_query($sql, $default_language));
// ensure record exists
if (!is_object($default_language_record)) {
die('Error occurred fetching default language.');
}
// update default language record
$default_language_record->domain = 'http://' . $default_http_host;
// set new variable for "language_default"
variable_set('language_default', $default_language_record);
$output .= "Setting language_default variable to: " . $default_language_record->domain . "\n";
// fetch language records
$sql = "
select *
from {languages}
";
$resource = db_query($sql);
$language_records = array();
while ($row = db_fetch_object($resource)) {
$language_records[] = $row;
}
// correct language records
foreach ($language_records as $key => $value) {
// determine language prefix
switch ($value->language) {
case $default_language:
$prefix = 'www.';
break;
default:
$prefix = $value->language . '.';
break;
}
$new_domain = 'http://' . $prefix . $http_host;
$sql = "
update {languages}
set domain = '%s'
where language = '%s'
";
db_query($sql, $new_domain, $value->language);
$output .= "Setting language record for language: \"" . $value->language . "\" to: " . $new_domain . "\n";
}
drupal_flush_all_caches();
$output .= "Executed: drupal_flush_all_caches()\n";
$output .= "DONE.\n";
echo $output;
?>
drush --uri=http://tdb.erl.dev scr fix_env.php
select language, domain
from {languages}
language domain
de http://de.tdb.erl.dev
en http://tdb.erl.dev
es http://es.tdb.erl.dev
fr http://fr.tdb.erl.dev
$ mysqldump -u user -pPASSWORD -h hostname database > database.sql
$ mysqldump database > database.sql
Eric-Londons-MacBook-Pro:backup Eric$ mysql --execute="show databases"
+---------------------+
| Database |
+---------------------+
| customers |
| db_pics_ericlondon |
| db_thedrupalblog_d6 |
| drupal |
| drupal-pics |
| drupalmusicproject |
| itunes |
+---------------------+
Eric-Londons-MacBook-Pro:backup Eric$ mysql --execute="show databases" | awk '{print $1}'
Database
customers
db_pics_ericlondon
db_thedrupalblog_d6
drupal
drupal-pics
drupalmusicproject
itunes
Eric-Londons-MacBook-Pro:backup Eric$ mysql --execute="show databases" | awk '{print $1}' | grep -iv ^Database$
customers
db_pics_ericlondon
db_thedrupalblog_d6
drupal
drupal-pics
drupalmusicproject
itunes
Eric-Londons-MacBook-Pro:backup Eric$ mysql --execute="show databases" | awk '{print $1}' | grep -iv ^Database$ | sed 's/\(.*\)/mysqldump \1 > \1.'$(date +"%Y%m%d")'.sql/'
mysqldump customers > customers.20100825.sql
mysqldump db_pics_ericlondon > db_pics_ericlondon.20100825.sql
mysqldump db_thedrupalblog_d6 > db_thedrupalblog_d6.20100825.sql
mysqldump drupal > drupal.20100825.sql
mysqldump drupal-pics > drupal-pics.20100825.sql
mysqldump drupalmusicproject > drupalmusicproject.20100825.sql
mysqldump itunes > itunes.20100825.sql
Eric-Londons-MacBook-Pro:backup Eric$ mysql --execute="show databases" | awk '{print $1}' | grep -iv ^Database$ | sed 's/\(.*\)/mysqldump \1 > \1.'$(date +"%Y%m%d")'.sql/' | sh
Eric-Londons-MacBook-Pro:backup Eric$ ls -1
customers.20100825.sql
db_pics_ericlondon.20100825.sql
db_thedrupalblog_d6.20100825.sql
drupal-pics.20100825.sql
drupal.20100825.sql
drupalmusicproject.20100825.sql
itunes.20100825.sql