0
25 -27 April, 2014 http://camp2014.drupal.dn.ua
Drush - use full power
Alexander Schedrov
You can do it in CLI
Most helpful commands
Most helpful commands: Core
• cc - clear-
cache
• dl, en, dis,
pm-uninstall
• upwd
• uli
• make
• updb
• up
• upc
• image-...
Most helpful commands: Contrib
Apache Solr
• solr-index
• solr-mark-all
• solr-delete-index
Registry Rebuild
• registry-
r...
Most helpful commands: Contrib
Features
• features-list(fl)
• features-diff(fd)
• features-revert(fr)
• features-revert-all...
DRUPAL SHELL
Installation on Windows
• download drush. Using c:drush as location in this example
• install gzip, tar, wget command line...
Installation on *nix
• download drush. Using home folder as location in this
example
• create symlink
!
https://drupal.org...
Configuration, code sync, sql
sync.
aliases.drushrc.php
$aliases['dev'] = array(
'root' => '~/Sites/drupal.dev',
);
!
!
drush @dev status
drush -r ~/Sites/dru...
$aliases['dev'] = array(
'root' => '~/Sites/blog',
'uri' => 'blog.dev',
);
$aliases['live'] = array(
'root' => '~/Sites/bl...
SSH
$aliases['live'] = array(
'remote-host' => 'bitbucket.org',
'remote-user' => 'sanchiz',
'root' => '/var/www',
'uri' =>...
Remote host with special
configuration
$aliases['live'] = array(
'remote-host' => 'dev.project.de',
'remote-user' => 'dev_a...
Code and database sync
If you do not use Git, this section for you =)
Code sync
$aliases['live'] = array(
'command-specific' => array(
'core-rsync' => array(
'exclude' => '*.sql',
'exclude' =>...
Sql-sync
$aliases['live'] = array(
'path-aliases' => array(
'%dump-dir' => ‘/home/dev_alex_sh/dump’,
),
);
drush sql-sync ...
Selective sync
emails => user+%uid@localhost
passwords => password
drush sql-sync @live @dev --structure-tables-key=common...
Sql-sync without Drush on
server
$aliases['live'] = array(
'databases' => array(
'default' =>
array(
'default' =>
array(
'...
$aliases['live'] = array(
'remote-host' => 'dev.project.de',
'remote-user' => 'default_alex_sh',
'root' => '/home/default_...
Development
DRUSH make
What can drush make do?
• Download modules
• Clone modules from git
• Apply patches
• Download libraries
• Down...
core = 7.x
api = 2
!
; core
projects[drupal][version] = 7.23
!
; modules
projects[views][version] = 3.7
projects[views][su...
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 ...
function drush_usertools_last_registration_validate($role = 'all') {
$count = drush_get_option('count');
if (!empty($count...
Usage
drush utl --count=5
drush utl administrator --count=10
function usertools_drush_command() {
$items = array();
$items['wipe-users'] = array(
'description' => 'Wipe user tables.',...
Usage
drush utw
function drush_usertools_disable_role() {
$query = db_select('role', 'r');
$query->fields('r', array('rid', ‘name'));
$que...
Links
• https://drupal.org/node/594744 - Drush on Windows
• https://drupal.org/node/1791676 - Drush on *nix
• http://drush...
THANK YOU!
!
Email: alexander.schedrov@gmail.com
Twitter: @alexschedrov
FB: schedrov
http://sanchiz.net
Upcoming SlideShare
Loading in...5
×

Drush - use full power - DrupalCamp Donetsk 2014

5,032

Published on

Drush - незаменимый инструмент для Drupal разработчика. Если вы досихпор не используете этот замечательный инструмент либо пользуетесь только малой частью команд - этот доклад будет очень полезен для вас.

Published in: Internet, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,032
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Drush - use full power - DrupalCamp Donetsk 2014"

  1. 1. 25 -27 April, 2014 http://camp2014.drupal.dn.ua Drush - use full power Alexander Schedrov
  2. 2. You can do it in CLI
  3. 3. Most helpful commands
  4. 4. Most helpful commands: Core • cc - clear- cache • dl, en, dis, pm-uninstall • upwd • uli • make • updb • up • upc • image-flush • vget, vset • sql-dump • sql-cli • sql-sync
  5. 5. Most helpful commands: Contrib Apache Solr • solr-index • solr-mark-all • solr-delete-index Registry Rebuild • registry- rebuild(rr) Localization Update • l10n-update • l10n-update- refresh • l10n-update- status
  6. 6. Most helpful commands: Contrib Features • features-list(fl) • features-diff(fd) • features-revert(fr) • features-revert-all(fr) • features-update(fu) • features-update- all(fua) Devel • devel-reinstall (dre) • fn-view(fnv) • fn-hook(fnh, hook) drush hook HOOK_NAME allows to discover order of hooks
  7. 7. DRUPAL SHELL
  8. 8. 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
  9. 9. Installation on *nix • download drush. Using home folder as location in this example • create symlink ! https://drupal.org/node/1791676 sudo ln -s ~/drush/drush /usr/local/bin/drush
  10. 10. Configuration, code sync, sql sync.
  11. 11. aliases.drushrc.php $aliases['dev'] = array( 'root' => '~/Sites/drupal.dev', ); ! ! drush @dev status drush -r ~/Sites/drupal.dev/ status ! drush ~/Sites/drupal.dev/#default status aliases.drush.php:
  12. 12. $aliases['dev'] = array( 'root' => '~/Sites/blog', 'uri' => 'blog.dev', ); $aliases['live'] = array( 'root' => '~/Sites/blog-live', 'uri' => 'blog-live.dev', ); blog.aliases.drushrc.php: drush @blog status drush @blog.dev status drush @blog.live status $aliases['blog'] = array( 'site-list' => array('@dev', '@live'), ); drush site-alias(sa)
  13. 13. SSH $aliases['live'] = array( 'remote-host' => 'bitbucket.org', 'remote-user' => 'sanchiz', 'root' => '/var/www', 'uri' => 'default', ); Important: remote server must have Drush ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub sanchiz@bitbucket.org equals drush dl drush_extras drush pushkey @live
  14. 14. 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', ), );
  15. 15. Code and database sync If you do not use Git, this section for you =)
  16. 16. Code sync $aliases['live'] = array( 'command-specific' => array( 'core-rsync' => array( 'exclude' => '*.sql', 'exclude' => '.svn', 'exclude' => '.git', 'exclude' => "sites/default/files/", ), ), ); drush rsync(core-rsync) @live @dev --include-conf ! drush rsync @live:sites/default/files @dev:sites/ default/files
  17. 17. Sql-sync $aliases['live'] = array( 'path-aliases' => array( '%dump-dir' => ‘/home/dev_alex_sh/dump’, ), ); drush sql-sync @live @dev ! drush sql-sync @live @dev --create-db
  18. 18. Selective sync emails => user+%uid@localhost passwords => password 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
  19. 19. Sql-sync without Drush on server $aliases['live'] = array( 'databases' => array( 'default' => array( 'default' => array( 'driver' => 'mysql', 'username' => 'username', 'password' => 'password', 'port' => '', 'host' => '127.0.0.1', 'database' => 'live_database', ), ), ), ); drush @live sql-conf --all --show=passwords
  20. 20. $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', );
  21. 21. Development
  22. 22. DRUSH make What can drush make do? • Download modules • Clone modules from git • Apply patches • Download libraries • Download core
  23. 23. 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
  24. 24. http://drushmake.me
  25. 25. Extensions Drush • A .drush folder in your HOME folder. • Anywhere in module • Drupal's /drush or /sites/all/drush folders.
  26. 26. 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.'); } }
  27. 27. 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); }
  28. 28. Usage drush utl --count=5 drush utl administrator --count=10
  29. 29. 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(); } }
  30. 30. Usage drush utw
  31. 31. 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'); }
  32. 32. 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
  33. 33. THANK YOU! ! Email: alexander.schedrov@gmail.com Twitter: @alexschedrov FB: schedrov http://sanchiz.net
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×