drush

drupal_is_cli et drush

Salut,

avec drush il est possible d’exécuter des commandes comme la suppression de noeuds, d'entité, etc
Est-ce que le fait de passer par drush permet de bénéficier de droits qui contournent les garde-fous
définis dans la gestion d'une entité du genre hook_validate et autre facon de contrôler la modif/supress/ajout ?

J'ai vu qu'il existe la fonction drupal_is_cli qui permet de savoir si un code est déclenché (jusqu'à quelle strate ????) par drush ou pas

Merci d'avance

commande drush up pour MàJ de plusieurs Sites Drupal

Bonjour,

Je souhaiterais faire mes mises à jour Core+Modules sur tous mes sites Drupal à partir de la commande Drush up
nous avons une quinzaine de sites et pour les mises à jour je passe derrière chaque site drupal pour les mettre en mode maintenance et pour lancer les update

Merci pour votre aide

Drush et la synchronisation BDD

Bonjour tout le monde,

Voilà, j'utilise Drush en local et sur un serveur mutualisé 1&1. J'ai un accès ssh et j'ai donc réussi à l'installer sur le serveur distant.

j'ai configuré mon fichier aliases.drushrc.php sur les 2 machines (local et distant). J'ai testé quelques commandes classiques pour voir si tout fonctionnait correctement comme drush @monalias cc, drush status, drush @monalias sql-conf, drush @monalias rsync.

Seulement en tentant de faire une synchro. de la bdd @prod @dev, cela ne fonctionne pas, j'ai une erreur.

Par benftwc

Installer Drush avec Composer

Drush est un outil indispensable pour développer sous drupal, il permet de contrôler son instance de site via le terminal pour les taches quotidiennes sur un site : téléchargement, activation de modules, vidage de cache, mise à jours de modules ou du core… Une fois que l’on y a goûté, on ne peut plus s’en passer.

Il existe un tas de méthode pour installer drush et il est parfois difficile de s’y retrouver : via les dépôts, PEAR, installation manuelle… Mais maintenant le moyen de plus simple est d’utiliser composer.

Si vous n’avez pas composer d’installé :

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Ensuite on peut installer Drush :

Pour la version 6 (compatible avec drupal 6 et 7) :

composer global require drush/drush:6.*

Pour la version 7-dev (compatible avec drupal 6, 7 et 8, mais en cours de développement) :

composer global require drush/drush:dev-master

La documentation complete de Drush ayant subi une mise à jour, voici son url : http://www.drushcommands.com/
Personnellement j’utilise la version 6 de drush en production et la version 7 en local, me permettant de l’utiliser sur Drupal 8.

Si vous souhaitez participer au projet, je vous invite à vous rendre sur leur repos github/a>.

Vous pouvez également consulter mon précédent article traitant de Drush ici :)

The post Installer Drush avec Composer appeared first on Benftwc.

Par benftwc

Ne « Bootstrap » pas Drupal, utilises Drush !

Lorsque vous faites du développement sous Drupal, vous serez amenés à exécuter des scripts PHP, effectuer des traitements sur différents champs ou nodes.

Dans ses situations, créer un module dédié à ces quelques tests / scripts serait une perte de temps.

Dans ce cas, créer un script PHP et « bootstrap » Drupal pour avoir accès à certaines fonctions telles que node_load, user_load ou db_select.

Drupal Bootstrap

Pour « bootstrap » Drupal, vous avez besoin d’ajouter ces lignes dans votre script :


<?php

// Drupal Bootstraping.
$drupal_core_path = $_SERVER['DOCUMENT_ROOT'];
define('DRUPAL_ROOT', $$drupal_core_path);
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// Drupal Bootstrap loaded.

// Do something.
$user = user_load(1);

Pour s’exécuter, le script doit être placé à la racine du répertoire Drupal, puis vous aurez à lancer dans un navigateur et aller sur http://www.votresite.fr/mon_script.php 

C’est long hein ? C’est justement là que Drush entre en jeu.

La puissance de Drush

Drush dispose d’une foule de méthodes, celle qui nous intéresse ici est « Drush Script » (alias. Drush scr). Elle permet d’exécuter le script depuis la ligne de commande :


$ drush scr mon_script.php

De plus, Drush s’occupant du bootstrap, vous pouvez transformer votre script en :

<?php

// Drupal is already Bootstrapped
// We can use Drupal functions

$user = user_load(1);

Après, par habitude, je n’aime pas laisser traîner trop de scripts dans la racine de mon projet. J’ajoute mes scripts dans un répertoire « custom » qui contient tous les scripts. Ça me permet notamment d’éviter les erreurs lors de suppression des scripts d’exécuter les dis scripts sur d’autres installations de Drupal, rien qu’en déplaçant les sources :-D

 $ drush scr ../custom/mon_script.php 

The post Ne « Bootstrap » pas Drupal, utilises Drush ! appeared first on Benftwc.

[Résolu] drush update - impossible de mettre à jour le core en local

Bonjour,

je tourne en rond en essayant de passer de Drupal 7.15 à 7.16.

J'utilise Drush, je suis sous windows 7 avec wamp en local.
Jusque là, les maj s'étaient faites sans problème.
En production, pas de problème non plus.

Mais en local, la mise à jour commence à se faire, jusqu'au message Destination directory .../drupal-7.16 already exists. Et ensuite la restauration automatique remet tout au niveau de départ.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Traiter de grandes quantités de données avec la batch api de Drupal et Drush

Lorsque l’on est confronté aux joies de la production et de la maintenance de sites Internet il arrive souvent que l’on doive effectuer certaines manipulations sur des données existantes, comme l’ajout, la modification ou la suppression d’informations. Ces opérations sont en générale longues et coûteuses en mémoire car les quantités de données à traiter sont importantes et c’est pour cela que l’on utilise des batchs qui permettent de relâcher les processus une fois terminés évitant ainsi la saturation des ressources disponibles.

Quand la quantité de données à manipuler semble faible, le traitement avec un batch n’est pas nécessaire car il prendrait bien plus de temps qu’avec un simple script php. Même s’il est difficile de quantifier quand utiliser un batch ou un simple script, car tout dépend du travail à effectuer, des machines et du contexte, sachez que si vous devez réaliser un traitement lourd, l’utilisation d’un batch vous permettra de ne pas avoir peur que PHP s’arrête, simulant un malaise par manque de mémoire ou de temps.

La réalisation d’un batch avec Drupal c’est chose facile, puisqu’il existe une API pour cela, la Batch Api – http://drupal.org/node/180528 qui permet de créer de simplement des scripts de traitement.Il y a plein d’exemples sur le sujet, regardez le module example – http://drupal.org/project/examples – qui vous explique de A à Z comment coder et exécuter depuis l’interface web un batch.

Dans mon cas, je cherchais à réaliser un batch sans avoir besoin d’être connecté à l’interface d’administration de mon site et c’est naturellement que je me suis tourné vers Drush pour réaliser cette tâche.

Voici donc un petit snipet que vous pourrez réutiliser pour vos batch.

Déclaration de la commande Drush

Pour commencer nous allons créer notre commande drush. Dans un module, créez un fichier portant le nom de votre module avec l’extension drush.inc (dans mon cas sandbox.drush.inc)

function sandbox_drush_command() {
 $items  = array();
 $items['my-import'] = array(
    'callback'      => 'sandbox_setup_batch',
    'description' => dt('Import'),
 );
 return $items;
}

function sandbox_drush_help($section) {
 switch ($section) {
    case 'drush:myimport':
     return dt("Traitement des utilisateurs.");
 }
}

Déclaration du Batch

Une fois notre commande prête il nous faut déclarer notre batch, sandbox_setup_batch().

function sandbox_setup_batch() {

 // Ici nous créons un tableau nommé opérations, qui contiendra toutes les fonctions qui devront être invoquées lors de l'exécution du batch. Il est ainsi possible de réaliser plusieurs traitements différents avec un seul batch.
 $operations = array();
 $operations[] = array('sandbox_batch_process', array());

 // Déclaration des propriétés de notre batch.
 $batch = array(
   // Le tableau d’opérations à effectuer lors du traitement de notre batch.
   'operations' => $operations,
   'title' => t('Import batch'),
   'init_message' => t('Initializing'),
   'error_message' => t('An error occurred'),
   // Fonction qui sera appelée à la fin du batch.
   'finished' => 'sandbox_finished_method'
 );

 // Initialisation du batch.
 batch_set($batch);
 $batch =& batch_get();

 $batch['progressive'] = FALSE;

 // Execution du batch.
 drush_backend_batch_process();
}

Opération de batch à réaliser

A ce stade notre commande Drush est créée et notre batch déclaré, mais pour le moment il ne fait rien car nous n’avons pas encore implémenté la fonction principale, celle que notre batch devra exécuter. Ici, je récupère un par un tous les utilisateurs ayant le statut actif du site.

function sandbox_batch_process(&$context) {

 if (!isset($context['sandbox']['progress'])) {
   $context['sandbox']['progress'] = 0;
   $context['sandbox']['current_user'] = 0;
   // Récupération du nombre d’élément à traiter.
   $context['sandbox']['max'] = db_result(db_query('SELECT COUNT(DISTINCT uid) FROM {users} WHERE status = 1'));
 }

 // Histoire de ne pas avoir de problèmes nous récupérerons les utilisateurs 50 par 50
 $limit = 50;

 $sql = "SELECT uid FROM {users} WHERE status = 1 AND uid > %d ORDER BY uid ASC";
 $result = db_query_range($sql, $context['sandbox']['current_user'], 0, $limit);
 while ($row = db_fetch_array($result)) {

   // C’est ici que doit se faire le traitement de votre batch.
   //...

   // Une fois que nous en avons terminé avec les données en cours il nous suffit de mettre à jour les informations du batch et de passer à la suivante.
   $context['sandbox']['progress']++;
   $context['sandbox']['current_user'] = $account->uid;
 }

 // Tant que l’on n’a pas traité tout le jeu de données on continue à exécuter notre batch.
 if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
   $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
 }
}

function sandbox_finished_method($success, $results, $operations) {
 drush_print('Finished importing!');
}


Et voilà, en quelques lignes nous avons un batch prêt à l’emploi pour traiter nos données. Notez que cette commande drush peut être ajoutée dans un CRON afin d’être exécutée régulièrement.

Cet article Traiter de grandes quantités de données avec la batch api de Drupal et Drush est apparu en premier sur Julien Dubreuil.

Export via Drush limité au 10 premiers noeuds

Bonjour,

je souhaite réaliser un export de tous mes contenus de manière régulière et automatisée.

Dans ce but j'ai installé le module views_data_export, que j'ai configuré comme il se doit.
Si j'appelle via un navigateur l'URL paramétrée tout fonctionne bien, j'obtiens un beau fichier csv avec tous mes contenus.

Comme je souhaite automatiser cette tâche, je tente de l’exécuter depuis drush en ligne de commande (pour le faire via un cron par la suite).
Ça fonctionne sauf que le fichier en sortie ne contient que mes dix premiers contenus.

Pages