Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Drush. Secrets come out.
Alexander Schedrov

DrupalCafe №5, Donetsk, 2013
DRUPAL SHELL
Most helpful commands
Core
•

cc - clear-cache

•

Contrib

sql-dump

•

sql-cli

•

Apache Solr
•

solr-index, solr-mark-all,
solr-delete-index

Localization Update
•

l10n-update, l10n-updaterefresh, l10n-update-status

make

Registry Rebuild

•

updb, up, upc

•

vget, vset

•

•

image-flush

Devel

•

Features

dl, en, dis, pm-uninstall

•

upwd

•

uli

registry-rebuild(rr)

•

features-list(fl)

•

features-diff(fd)

•

devel-reinstall (dre)

•

features-revert(fr)

•

fn-hook(fnh, hook)

•

etc.
Installation on Windows
•

download drush. Using c:drush as location in this example

•

install gzip, tar, wget command line binaries

•

set PATH environment variables

c:drush;d:xamppphp;d:xamppmysqlbin;C:Program FilesGnuWin32bin

•

MsysGit

https://drupal.org/node/594744
Installation on *nix
•

download drush. Using home folder as location in this
example

•

create symlink

sudo ln -s ~/drush/drush /usr/local/bin/drush
!

https://drupal.org/node/1791676
Configuration, code sync, sql
sync.
aliases.drushrc.php
drush -r ~/Sites/drupal.dev/ status
!

drush ~/Sites/drupal.dev/#default status
!

aliases.drush.php:
$aliases['dev'] = array(
'root' => '~/Sites/drupal.dev',
);
!
!

drush @dev status
blog.aliases.drushrc.php:
$aliases['dev'] = array(
'root' => '~/Sites/blog',
'uri' => 'blog.dev',
);
$aliases['live'] = array(
'root' => '~/Sites/blog-live',
'uri' => 'blog-live.dev',
);
!

drush @blog status
drush @blog.dev status
drush @blog.live status
!

$aliases['all-blog'] = array(
'site-list' => array('@dev', '@live'),
);
!

drush site-alias(sa)
SSH
Important: remote server must have Drush
!

$aliases['live'] = array(
'remote-host' => 'bitbucket.org',
'remote-user' => 'sanchiz',
'root' => '/var/www',
'uri' => 'default',
);
!

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub sanchiz@bitbucket.org

equals
!

drush dl drush_extras
drush pushkey @live
Remote host with special
configuration
!

$aliases['live'] = array(
'remote-host' => 'dev.project.de',
'remote-user' => 'dev_alex_sh',
'root' => '/home/dev_alex_sh/www',
'php' => '/usr/bin/php',
'path-aliases' => array(
'%drush-script' => '/home/dev_alex_sh/
drush/drush.php',
),
);
Code and database sync
If you do not use Git, this section for you =)
Code sync
!
drush rsync(core-rsync) @live @dev --include-conf
!
drush rsync @live:sites @dev:sites
!

$aliases['live'] = array(
'command-specific' => array(
'core-rsync' => array(
'exclude' => '*.sql',
'exclude' => '.svn',
'exclude' => '.git',
'exclude' => "sites/default/files/",
),
),
);
Sql-sync
drush sql-sync @live @dev
!

drush sql-sync @live @dev --create-db
!
!

$aliases['live'] = array(
'path-aliases' => array(
'%dump-dir' => ‘/home/dev_alex_sh/dump’,
),
);
!
!
Selective sync
drush sql-sync @live @dev --structure-tables-key=common
drushrc.php:

!

$options['structure-tables']['custom'] = array(
'cache',
'cache_*',
'search_*',
'watchdog'
);

!

drush sql-sync @live @dev --structure-tables-key=custom --no-cache=true

!

drush sql-sync @live @dev --sanitize

!

emails => user+%uid@localhost
passwords => password
Sql-sync without Drush on
server
drush @live sql-conf --all --show=passwords

!

$aliases['live'] = array(
'databases' => array(
'default' =>
array(
'default' =>
array(
'driver' => 'mysql',
'username' => 'username',
'password' => 'password',
'port' => '',
'host' => '127.0.0.1',
'database' => 'live_database',
),
),
),
);

!
$aliases['live'] = array(
'remote-host' => 'dev.project.de',
'remote-user' => 'default_alex_sh',
'root' => '/home/default_alex_sh/www',
'php' => '/usr/bin/php',
'php-options' => '-d error_reporting="E_ALL^E_DEPRECATED"',
'variables' => array('mail_system' => array('default-system' => 'DevelMailLog')),
'databases' => array(
'default' =>
array(
'default' =>
array(
'driver' => 'mysql',
'username' => 'username',
'password' => 'password',
'port' => '',
'host' => '127.0.0.1',
'database' => 'live_database',
),
),
),

!

!
);

'path-aliases' => array(
'%drush-script' => '/home/default_alex_sh/drush/drush.php',
'%files' => '/home/default_alex_sh/www/sites/default/files',
'%drush' => '/home/default_alex_sh/drush',
'%dump-dir' => '/home/default_alex_sh/www/dump',
),
'command-specific' => array(
'core-rsync' => array(
'exclude' => '*.sql',
'exclude' => '.svn',
'exclude' => '.git',
'exclude' => "sites/default/files/",
),
),
'ssh-options' => '-p 2222',
Development
DRUSH make
What can drush make do?
•

Download modules

•

Clone modules from git

•

Apply patches

•

Download libraries

•

Download core
core = 7.x
api = 2

!

; core
projects[drupal][version] = 7.23

!

; modules
projects[views][version] = 3.7
projects[views][subdir] = "contrib"

!

projects[views][version] = 3.7
projects[views][subdir] = "contrib"
projects[views][patch][] = "https://drupal.org/files/views_join_condition_increment_5.patch"

!
!

projects[views][type] = module
projects[views][download][type] = git
projects[views][download][revision] = 6920ff71c0bf3a75fc769658ba0dabb42ffcd357
projects[views][download][branch] = 7.x-3.x
projects[views][subdir] = "contrib"

!

; libraries
libraries[ckeditor][download][type] = get
libraries[ckeditor][download][url] = "http://download.cksource.com/CKEditor/CKEditor/CKEditor
4.3/ckeditor_4.3_full.zip"

!

libraries[colorbox][download][type] = get
libraries[colorbox][download][url] = "https://github.com/jackmoore/colorbox/archive/
master.zip"

drush make make_file.make --no-core
http://drushmake.me
Extensions Drush

•

A .drush folder in your HOME folder.

•

Anywhere in module

•

Drupal's /drush or /sites/all/drush folders.
function usertools_drush_command() {
$items = array();

!

!

$items['last-registration'] = array(
'description' => 'Show last registration.',
'arguments' => array(
'role' => 'Specific role.',
),
'options' => array(
'count' => array(
'description' => 'Count rows.',
'example-value' => '5',
),
),
'examples' => array(
'drush utl admin --count=5' => 'Show the last 5 registrations of admin.',
),
'aliases' => array('utl'),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
);
return $items;

}

!

function usertools_drush_help($section) {
switch ($section) {
case 'drush:last-registration':
return dt('This command will show you last registrations.');
}
}
function drush_usertools_last_registration_validate($role = 'all') {
$count = drush_get_option('count');
if (!empty($count) && !is_numeric($count)) {
return drush_set_error('Count should be numeric.');
}
}

!

function drush_usertools_last_registration($role = 'all') {
$count = drush_get_option('count');
if (empty($count)) {
$count = 10;
}

!
!

!

!

}

$query = db_select('users', 'u');
// Condition by role.
if ($role != 'all') {
$rid = drush_usertools_get_role_by_name($role);
$query->innerJoin('users_roles', 'ur', 'u.uid = ur.uid');
$query->condition('ur.rid', $rid);
}
$query->fields('u', array('uid', 'name', 'mail', 'access', 'created'));
$query->condition('u.uid', 0, '<>');
$query->range(0, $count);
$query->orderBy('u.created', 'DESC');
$result = $query->execute();
$items[] = array('uid', dt('Name'), dt('email'), dt('Last login'));
foreach ($result as $user) {
$items[] = array(
$user->uid,
$user->name,
$user->mail,
$user->access == 0 ? dt('Never') : format_interval(time() - $user->access) . ' ago',
);
}
drush_print_table($items, TRUE);
Usage
drush utl --count=5
drush utl administrator --count=10
function usertools_drush_command() {
$items = array();
$items['wipe-users'] = array(
'description' => 'Wipe user tables.',
'examples' => array(
'drush utw' => 'Wipe users.'
),
'aliases' => array('utw'),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_ROOT,
);
return $items;
}

!

function drush_usertools_wipe_users() {
if (drush_confirm(dt('You want to delete all users? Are you sure?'))) {
$query = db_select('users', 'u');
$query->fields('u', array('uid', 'name'));
$query->condition('u.uid', 1, '>');
$result = $query->execute();
foreach ($result as $user) {
drush_log(dt('Deleting user') . ' ' . $user->name . '...',
'warning');
user_delete($user->uid);
drush_log(dt('Succes deleting') . ' ' . $user->name, 'success');
}
}
else {
drush_user_abort();
}
}
Usage
drush utw
function drush_usertools_disable_role() {
$query = db_select('role', 'r');
$query->fields('r', array('rid', ‘name'));
$query->condition('r.rid', 1, '<>');
$query->orderBy('r.rid');
$result = $query->execute();

!

!
!
!
}

!
!
!
!
!
!
!
!
!

$options = array();
foreach ($result as $role) {
$options[$role->rid] = array($role->name);
}
$rid = drush_choice($options, dt('Select role:'));
// SQL queries.
drush_log('All users of role ' . $options[$rid][0] . ' disabled.', 'success');
Links
•

https://drupal.org/node/594744 - Drush on Windows

•

https://drupal.org/node/1791676 - Drush on *nix

•

http://drushmake.me - Drush make

•

http://drush.ws

•

https://gist.github.com/Sanchiz/7627657
Thank you!
!

Email: alexander.schedrov@gmail.com
Twitter: @alexschedrov
FB: schedrov
http://sanchiz.net

More Related Content

Drush. Secrets come out.

  • 1. Drush. Secrets come out. Alexander Schedrov DrupalCafe №5, Donetsk, 2013
  • 3. Most helpful commands Core • cc - clear-cache • Contrib sql-dump • sql-cli • Apache Solr • solr-index, solr-mark-all, solr-delete-index Localization Update • l10n-update, l10n-updaterefresh, l10n-update-status make Registry Rebuild • updb, up, upc • vget, vset • • image-flush Devel • Features dl, en, dis, pm-uninstall • upwd • uli registry-rebuild(rr) • features-list(fl) • features-diff(fd) • devel-reinstall (dre) • features-revert(fr) • fn-hook(fnh, hook) • etc.
  • 4. Installation on Windows • download drush. Using c:drush as location in this example • install gzip, tar, wget command line binaries • set PATH environment variables c:drush;d:xamppphp;d:xamppmysqlbin;C:Program FilesGnuWin32bin • MsysGit https://drupal.org/node/594744
  • 5. Installation on *nix • download drush. Using home folder as location in this example • create symlink sudo ln -s ~/drush/drush /usr/local/bin/drush ! https://drupal.org/node/1791676
  • 7. aliases.drushrc.php drush -r ~/Sites/drupal.dev/ status ! drush ~/Sites/drupal.dev/#default status ! aliases.drush.php: $aliases['dev'] = array( 'root' => '~/Sites/drupal.dev', ); ! ! drush @dev status
  • 8. blog.aliases.drushrc.php: $aliases['dev'] = array( 'root' => '~/Sites/blog', 'uri' => 'blog.dev', ); $aliases['live'] = array( 'root' => '~/Sites/blog-live', 'uri' => 'blog-live.dev', ); ! drush @blog status drush @blog.dev status drush @blog.live status ! $aliases['all-blog'] = array( 'site-list' => array('@dev', '@live'), ); ! drush site-alias(sa)
  • 9. SSH Important: remote server must have Drush ! $aliases['live'] = array( 'remote-host' => 'bitbucket.org', 'remote-user' => 'sanchiz', 'root' => '/var/www', 'uri' => 'default', ); ! ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub sanchiz@bitbucket.org equals ! drush dl drush_extras drush pushkey @live
  • 10. Remote host with special configuration ! $aliases['live'] = array( 'remote-host' => 'dev.project.de', 'remote-user' => 'dev_alex_sh', 'root' => '/home/dev_alex_sh/www', 'php' => '/usr/bin/php', 'path-aliases' => array( '%drush-script' => '/home/dev_alex_sh/ drush/drush.php', ), );
  • 11. Code and database sync If you do not use Git, this section for you =)
  • 12. Code sync ! drush rsync(core-rsync) @live @dev --include-conf ! drush rsync @live:sites @dev:sites ! $aliases['live'] = array( 'command-specific' => array( 'core-rsync' => array( 'exclude' => '*.sql', 'exclude' => '.svn', 'exclude' => '.git', 'exclude' => "sites/default/files/", ), ), );
  • 13. Sql-sync drush sql-sync @live @dev ! drush sql-sync @live @dev --create-db ! ! $aliases['live'] = array( 'path-aliases' => array( '%dump-dir' => ‘/home/dev_alex_sh/dump’, ), ); ! !
  • 14. Selective sync drush sql-sync @live @dev --structure-tables-key=common drushrc.php: ! $options['structure-tables']['custom'] = array( 'cache', 'cache_*', 'search_*', 'watchdog' ); ! drush sql-sync @live @dev --structure-tables-key=custom --no-cache=true ! drush sql-sync @live @dev --sanitize ! emails => user+%uid@localhost passwords => password
  • 15. Sql-sync without Drush on server drush @live sql-conf --all --show=passwords ! $aliases['live'] = array( 'databases' => array( 'default' => array( 'default' => array( 'driver' => 'mysql', 'username' => 'username', 'password' => 'password', 'port' => '', 'host' => '127.0.0.1', 'database' => 'live_database', ), ), ), ); !
  • 16. $aliases['live'] = array( 'remote-host' => 'dev.project.de', 'remote-user' => 'default_alex_sh', 'root' => '/home/default_alex_sh/www', 'php' => '/usr/bin/php', 'php-options' => '-d error_reporting="E_ALL^E_DEPRECATED"', 'variables' => array('mail_system' => array('default-system' => 'DevelMailLog')), 'databases' => array( 'default' => array( 'default' => array( 'driver' => 'mysql', 'username' => 'username', 'password' => 'password', 'port' => '', 'host' => '127.0.0.1', 'database' => 'live_database', ), ), ), ! ! ); 'path-aliases' => array( '%drush-script' => '/home/default_alex_sh/drush/drush.php', '%files' => '/home/default_alex_sh/www/sites/default/files', '%drush' => '/home/default_alex_sh/drush', '%dump-dir' => '/home/default_alex_sh/www/dump', ), 'command-specific' => array( 'core-rsync' => array( 'exclude' => '*.sql', 'exclude' => '.svn', 'exclude' => '.git', 'exclude' => "sites/default/files/", ), ), 'ssh-options' => '-p 2222',
  • 18. DRUSH make What can drush make do? • Download modules • Clone modules from git • Apply patches • Download libraries • Download core
  • 19. core = 7.x api = 2 ! ; core projects[drupal][version] = 7.23 ! ; modules projects[views][version] = 3.7 projects[views][subdir] = "contrib" ! projects[views][version] = 3.7 projects[views][subdir] = "contrib" projects[views][patch][] = "https://drupal.org/files/views_join_condition_increment_5.patch" ! ! projects[views][type] = module projects[views][download][type] = git projects[views][download][revision] = 6920ff71c0bf3a75fc769658ba0dabb42ffcd357 projects[views][download][branch] = 7.x-3.x projects[views][subdir] = "contrib" ! ; libraries libraries[ckeditor][download][type] = get libraries[ckeditor][download][url] = "http://download.cksource.com/CKEditor/CKEditor/CKEditor 4.3/ckeditor_4.3_full.zip" ! libraries[colorbox][download][type] = get libraries[colorbox][download][url] = "https://github.com/jackmoore/colorbox/archive/ master.zip" drush make make_file.make --no-core
  • 21. Extensions Drush • A .drush folder in your HOME folder. • Anywhere in module • Drupal's /drush or /sites/all/drush folders.
  • 22. function usertools_drush_command() { $items = array(); ! ! $items['last-registration'] = array( 'description' => 'Show last registration.', 'arguments' => array( 'role' => 'Specific role.', ), 'options' => array( 'count' => array( 'description' => 'Count rows.', 'example-value' => '5', ), ), 'examples' => array( 'drush utl admin --count=5' => 'Show the last 5 registrations of admin.', ), 'aliases' => array('utl'), 'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL, ); return $items; } ! function usertools_drush_help($section) { switch ($section) { case 'drush:last-registration': return dt('This command will show you last registrations.'); } }
  • 23. function drush_usertools_last_registration_validate($role = 'all') { $count = drush_get_option('count'); if (!empty($count) && !is_numeric($count)) { return drush_set_error('Count should be numeric.'); } } ! function drush_usertools_last_registration($role = 'all') { $count = drush_get_option('count'); if (empty($count)) { $count = 10; } ! ! ! ! } $query = db_select('users', 'u'); // Condition by role. if ($role != 'all') { $rid = drush_usertools_get_role_by_name($role); $query->innerJoin('users_roles', 'ur', 'u.uid = ur.uid'); $query->condition('ur.rid', $rid); } $query->fields('u', array('uid', 'name', 'mail', 'access', 'created')); $query->condition('u.uid', 0, '<>'); $query->range(0, $count); $query->orderBy('u.created', 'DESC'); $result = $query->execute(); $items[] = array('uid', dt('Name'), dt('email'), dt('Last login')); foreach ($result as $user) { $items[] = array( $user->uid, $user->name, $user->mail, $user->access == 0 ? dt('Never') : format_interval(time() - $user->access) . ' ago', ); } drush_print_table($items, TRUE);
  • 24. Usage drush utl --count=5 drush utl administrator --count=10
  • 25. function usertools_drush_command() { $items = array(); $items['wipe-users'] = array( 'description' => 'Wipe user tables.', 'examples' => array( 'drush utw' => 'Wipe users.' ), 'aliases' => array('utw'), 'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_ROOT, ); return $items; } ! function drush_usertools_wipe_users() { if (drush_confirm(dt('You want to delete all users? Are you sure?'))) { $query = db_select('users', 'u'); $query->fields('u', array('uid', 'name')); $query->condition('u.uid', 1, '>'); $result = $query->execute(); foreach ($result as $user) { drush_log(dt('Deleting user') . ' ' . $user->name . '...', 'warning'); user_delete($user->uid); drush_log(dt('Succes deleting') . ' ' . $user->name, 'success'); } } else { drush_user_abort(); } }
  • 27. function drush_usertools_disable_role() { $query = db_select('role', 'r'); $query->fields('r', array('rid', ‘name')); $query->condition('r.rid', 1, '<>'); $query->orderBy('r.rid'); $result = $query->execute(); ! ! ! ! } ! ! ! ! ! ! ! ! ! $options = array(); foreach ($result as $role) { $options[$role->rid] = array($role->name); } $rid = drush_choice($options, dt('Select role:')); // SQL queries. drush_log('All users of role ' . $options[$rid][0] . ' disabled.', 'success');
  • 28. Links • https://drupal.org/node/594744 - Drush on Windows • https://drupal.org/node/1791676 - Drush on *nix • http://drushmake.me - Drush make • http://drush.ws • https://gist.github.com/Sanchiz/7627657
  • 29. Thank you! ! Email: alexander.schedrov@gmail.com Twitter: @alexschedrov FB: schedrov http://sanchiz.net