config

Ja, Drush auch kann Autocompletition, zu deutsch "Autovervollständigung"
und das anscheinenend nicht erst seit gestern, obwohl erst gestern entdeckt...

Tab-Vervollständigung

Ganz genau genommen, spricht man in diesem Fall der Autovervollständigung von einer Befehlszeilenergänzung bzw. Tab-Vervollständigung.
Es besteht auch im Drush-Kontext die Möglichkeit Drush-Befehle, globale Drush-Optionen und den spezifischen Optionen zu einem Drush-Befehlen
durch "tabben" (dem ein- oder zweimaligen Drücken der Tabulator Taste) in der Shell zu vervollständigen.

Beispiele

Tab-Vervollständigung von globalen Drush-Optionen:

florian@box:/var/www/example.com/drupal$ drush @git --<tab><tab>
--alias-path           --backend  
--backup-location      --cache-class-<bin>
--cache-default-class  --choice
--command-specific     --complete-debug
--config               --confirm-rollback
[...]

Tab-Vervollständigung von Drush-Befehlen, die mit sql- beginnen:

florian@box:/var/www/example.com/drupal$ drush @git sql-<tab><tab>
sql-cli   sql-conf   sql-connect    sql-create sql-drop
sql-dump  sql-query  sql-sanitize   sql-sync

Vervollständigung der Optionen, die mit dem Befehl sql-dump nutzbar sind:

florian@box:/var/www/example.com/drupal$ drush @git sql-dump --<tab><tab>
--create-db    --data-only   --gzip    --result-file   --structure-tables-key  
--tables-list   --database   --db-url  --ordered-dump  --skip-tables-key        
--tables-key

In der Regel kann man eine Drupal-Site mit einem Projekt gleichsetzen, Projekte nutzen eine Versionsverwaltung, immer häufiger ist dies Git.

Je mehr ich Git nutze, je weniger nutze ich die Möglichkeiten der klassischen Drupal-Multisite-Funkionalität, dem Teilen von Drupal-Core und Contributed-Modules über viele Drupal-Sites hinweg.

Im folgenden möchte ich diese (Verzeichnis-)Struktur innerhalb des Git-Repositories beleuchten und in diesem Zusammenhang Ansätze von spezielleren Drush-Konfigurationsdateien zeigen, welche sich in Drupal-Projekten für mich etabliert haben, ein Teil hiervon ist Drupal-7 spezifisch.

example.com/
|-- drupal
|   `-- sites
|       |-- all
|       |   |-- modules
|       |   |   |- features
|       |   |   |- contrib
|       |   |   `- custom
|       |   `-- themes
|       |-- default
|       |   |-- default.settings.php
|       |   |-- files
|       |   |-- themes
|       |   `-- settings.php
|       |-- example.sites.php
|       `-- sites.php
|-- dumps
|   `-- 20120615-185144.sql
|-- etc
|   |-- apache2
|   |   `-- sites-available
|   |       `-- example.com
|   `-- drush
|       |--- aliases.drushrc.php    
|       |--- git.drushrc.php    
|       `--- example.drushrc.php    
|-- privatefiles
|   `-- IMG_6445.JPG  
`-- salt
    `-- salt.txt
  • drupal

    Die Drupal Code-Basis und DocumentRoot des Webservers.

  • dumps

    Hier liegen die Datenbankdumps

  • etc

    Projektrelevante Konfigurationsdateien, relativ zur Wurzel des Dateisystems.

  • privatefiles

    Dateien die über Drupal verwaltet werden, (Ziel beim Hochladen: Private Dateien).

  • salt

    Beinhaltet in der Datei salt.txt, den aus settings.php ausgelagerten Salt

Rudimente für ein Drupal-Deployment mit

  • Lokaler Entwicklungumgebung
  • Stage-Umgebung
  • Live / Produktionsumgebung

unter Verwendung, der in Drupal-7 neu eingeführten Multisite-Features in der Datei sites.php, Drush-Aliases
und einer speziellen settings.php,
die in diesem Fall versioniert wird.

sites.php -- Verzeichnis Aliase in Drupal 7.x

Die in Drupal 7.x neu eingeführte Datei sites.php stellt erstmalig Verzeichnis-Aliase für Drupal-Multisites zur Verfügung.

So ist es jetzt möglich mit verschiedenen Domains bzw. VirtualHosts ein bestimmtes Verzeichnis innerhalb von sites anzusprechen,
ohne über z.B. Symbolische Links zu gehen, was in vorgigen Drupal-Versionen zur Folge haben konnte, daß Datei- oder Modulpfade beim "umbiegen" von der Dev-Site example.mydomain.de auf die Live-Site example.com divergent sind.

// sites/sites.php

// (LOCAL) DEV SITE
$sites['example.localhost'] = 'example.com';

// STAGE SITES
$sites['stage-example.mydomain.de'] = 'example.com';
$sites['stage.example.com'] = 'example.com';

// LIVE SITE
$sites['example.com'] = 'example.com';

@see /path/to/drupal7/sites/example.sites.php

Befehl: git config

git config --global user.name "Florian Latzel"
git config --global user.email "floh@netzaffe.de"

Git-Konfigurationsdateien: /etc/gitconfig, ~/.gitconfig, .git/config

Auswertungsreihenfolge:

Wer kennt das nicht,
Freie Software ist für gewöhnlich sehr gut kommentiert, so auch /etc/samba/smb.conf, die Konfigurationsdatei von Samba.

Diese besteht zu über 90% aus Kommentaren...

Um die Direktiven schneller im Blick zu haben, können die folgenden Snippets in ~/.vimrc oder /etc/vim/vimrc eingetragen werden, die Kommentare werden gefaltet.

let &foldexpr='getline(v:lnum)=~"^.*#"'
autocmd FileType samba setlocal foldmethod=expr

Die Konfigurationsdatei für drush

Hier verwendet, drush für Drupal 6.x.

  1. <?php
  2. $options['r'] = '/home/foobar/drupal/6.x';
  3.  
  4. $options['v'] = 1;
  5.  
  6. $options['skip-tables'] = array(
  7.  'common' => array('accesslog', 'cache', 'cache_block', 'cache_filter', 'cache_form', 'cache_menu', 'cache_page', 'cache_update', 'history', 'search_dataset', 'search_index', 'search_total', 'sessions', 'watchdog'),
  8. );
  9.  
  10. $options['handler'] = 'wget';
pinentry-program /usr/bin/pinentry-qt
no-grab
default-cache-ttl 1800

debug-level basic
log-file socket:///home/florian/.gnupg/log-socket

to be continued.

Konfiguration von gpg und gpg-agent.

Um einem "White-Screen" vorzubeugen wenn zu viele Drupal-Module installiert sind,
setzen wir die memory_limit in /etc/php5/apache2/php.ini höher.

memory_limit = 64M      ; Maximum amount of memory a script may consume (16MB)

In /etc/vim/vimrc oder ~/.vimrc eintragen um beim Einfügen von mehreren Zeilen Code keinen häßlichen Treppeneffekt zu bekommen.

set pastetoggle=<F9>