Drush. Secrets come out.
Upcoming SlideShare
Loading in...5
×
 

Drush. Secrets come out.

on

  • 934 views

How to use Drush at full power.

How to use Drush at full power.
Как использовать Drush на полную мощность.

Statistics

Views

Total Views
934
Slideshare-icon Views on SlideShare
763
Embed Views
171

Actions

Likes
1
Downloads
7
Comments
0

5 Embeds 171

http://sanchiz.net 156
http://sanchiz.dev 9
http://www.linkedin.com 4
http://188.120.253.37 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Drush. Secrets come out. Drush. Secrets come out. Presentation Transcript

    • 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