0

I have a Drupal module with a function that runs a system(“myscript.drush”);

function _deploy_monitor_stream($submission_id) {
  header("Content-type: text/plain");
  disable_ob(); // Outputs to browser

  $command = 'whoami'; // Debug : Returns my local user since i'm using MAMP 
  system($command, $return);

  $command = 'pwd'; // Debug : Returns my drupal root so it's fine
  system($command, $return);

  $PATH = getenv('PATH'); // Debug : I tried to force my path to have all bins i need
  putenv('PATH=' . $PATH . ':[FULL_PATH_TO/drush:/Applications/MAMP/Library/bin/mysql');

  $command = 'drush myscript.drush --option1 --option 2 | tee mytest.log;
  system($command);
}

myscript.drush runs different drush_shell_exec() including a site-install function.

$si = DRUSH_PATH . " -y si my_profile --db-url=mysql://root:root@localhost/$DATABASE_NAME ";
$si .= "-l $SITE_URL --sites-subdir=$SITE_URL --account-name=$DRUPAL_ADMIN_NAME --account-pass=$DRUPAL_ADMIN_PWD ";
$si .= "--site-mail=$SITE_CONTACT_MAIL";
drush_print("Installing site ... " . $site_code); // ---- INSTALL INSTALLATION PROFILE
if (drush_shell_exec($si)) {
  drush_log("Site succesfully installed", 'ok');
}
else {
  //If install failed, we abort
  foreach (drush_shell_exec_output() as $m) {
    drush_print($m);
  }
  drush_die("Command // $si //  failed");
}    

While it works fine if I run it from the command line, it doesn't work when my PHP calls the script.

Here is the script output :

Installing site ... /Users/me/.composer/vendor/drush/drush/drush --root=/Users/me/Documents/workspace/proto -y si my_profile --db-url=mysql://root:root@localhost/test_site.test.com -l test_site.test.com --sites-subdir=test_site.test.com --account-name=admin --account-pass=admin --site-mail=system_contact@example.com
Directory /Users/me/.drush/cache/default exists, but is not       [error]
writable. Please check directory permissions.
You are about to CREATE  the 'test_site.test.com' database. Do you want to continue? (y/n): y
sh: mysql: command not found
Starting Drupal installation. This takes a few seconds ...                  [ok]
WD php: Exception: To start over, you must empty your existing           [error]
database.To install to a different database, edit the appropriate
settings.php file in the sites folder.To upgrade an existing
installation, proceed to the update script.View your existing site.
in install_begin_request() (line 301 of
/Users/me/Documents/workspace/proto/includes/install.core.inc).
WD php: Warning: Cannot modify header information - headers already    [warning]
sent by (output started at
/Users/me/.composer/vendor/drush/drush/includes/output.inc:38)
in drupal_send_headers() (line 1233 of
/Users/me/Documents/workspace/proto/includes/bootstrap.inc).
Exception: <ul><li>To start over, you must empty your existing database.</li><li>To install to a different database, edit the appropriate <em>settings.php</em> file in the <em>sites</em> folder.</li><li>To upgrade an existing installation, proceed to the <a href="http://test_site.test.com/update.php">update script</a>.</li><li>View your <a href="http://test_site.test.com">existing site</a>.</li></ul> in install_begin_request() (line 301 of /Users/me/Documents/workspace/proto/includes/install.core.inc).
Drush command terminated abnormally due to an unrecoverable error.       [error]
drush: Command // /Users/me/.composer/vendor/drush/drush/drush --root=/Users/me/Documents/workspace/proto -y si my_profile --db-url=mysql://root:root@localhost/test_site.test.com -l test_site.test.com --sites-subdir=test_site.test.com --account-name=admin --account-pass=admin --site-mail=system_contact@example.com //  failed

As you can see, it cannot find the mysql command sh: mysql: command not found I tried to add the path to mysql to all and even force it to the PATH var before running the script in case it would only live for the current run - but it doesn't solve the problem.

If i do an

drush_shell_exec('echo $PATH');
foreach (drush_shell_exec_output() as $m) {
    drush_print($m);
}

At the beginning of my drush script, it confirms mysql is in the PATH var. So Drush should be able to find it as well !

Anybody can help ?

Thanks !

UPDATE 1

Here is a log with a si --debug option. It doesn't give more information - We still see that the "script" failes to call mysql Installing site ... /Users/me/.composer/vendor/drush/drush/drush --root=/Users/me/Documents/workspace/proto -y si --debug my_profile --db-url=mysql://root:root@localhost/test_site.test.com -l test_site.test.com --sites-subdir=test_site.test.com --account-name=admin --account-pass=admin --site-mail=system_contact@example.fr Bootstrap to phase 0. [0 sec, 1.88 MB] [bootstrap] Drush bootstrap phase : _drush_bootstrap_drush() [0.01 sec, 2 MB] [bootstrap] Directory /Users/me/.drush/cache/default exists, but is not [error] writable. Please check directory permissions. [0.01 sec, 2.01 MB] Cache MISS cid: 6.5.0-alias-path--e51a01eaadbedd8992f93f4b1e37a340 [debug] [0.01 sec, 2.01 MB] Cache MISS cid: 6.5.0-commandfiles-0-9f983fb1e5cd5a06f3cad18503b4c204 [debug] [0.01 sec, 2.02 MB] Cache SET cid: 6.5.0-commandfiles-0-9f983fb1e5cd5a06f3cad18503b4c204 [debug] [0.02 sec, 2.03 MB] Bootstrap to phase 0. [0.06 sec, 5.59 MB] [bootstrap] Bootstrap to phase 1. [0.08 sec, 5.6 MB] [bootstrap] Drush bootstrap phase : _drush_bootstrap_drupal_root() [0.09 sec, [bootstrap] 6.49 MB] Initialized Drupal 7.35 root directory at [notice] /Users/me/Documents/workspace/proto [0.09 sec, 6.49 MB] Found command: site-install (commandfile=core) [0.09 sec, 6.49 MB] [bootstrap] Calling hook drush_core_site_install_validate [0.15 sec, 6.52 MB] [debug] Returned from hook drush_core_site_install_validate [0.15 sec, 6.52 [debug] MB] Calling hook drush_core_pre_site_install [0.15 sec, 6.53 MB] [debug] Executing: mysql --database=test_site.test.com --host=localhost --user=root --password=root -e "SELECT 1;" 2> /dev/null > /dev/null You are about to CREATE the 'test_site.test.com' database. Do you want to continue? (y/n): y Sites directory sites/test_site.test.com already exists - [notice] proceeding. [0.15 sec, 6.53 MB] Drush bootstrap phase : _drush_bootstrap_drupal_site() [0.15 sec, [bootstrap] 6.54 MB] Initialized Drupal site test_site.test.com at [notice] sites/test_site.test.com [0.15 sec, 6.54 MB] Cache MISS cid: [debug] 6.5.0-install_profile-fbfb0256099ded6086bc55133257a1bc [0.16 sec, 6.55 MB] Cache MISS cid: 6.5.0-commandfiles-2-5ea45eaeffdc711df5631f275d26edd1 [debug] [0.16 sec, 6.55 MB] Cache SET cid: 6.5.0-commandfiles-2-5ea45eaeffdc711df5631f275d26edd1 [debug] [0.23 sec, 6.57 MB] Executing: mysql --database=test_site.test.com --host=localhost --user=root --password=root -e "SELECT 1;" 2> /dev/null > /dev/null Calling system(mysql --database=information_schema --host=localhost --user=root --password=root < /private/tmp/drush_QDZllv); sh: mysql: command not found Returned from hook drush_core_pre_site_install [0.26 sec, 7.74 MB] [debug] Calling hook drush_core_site_install [0.26 sec, 7.75 MB] [debug] Starting Drupal installation. This takes a few seconds ... [0.26 sec, [ok] 8.03 MB] Calling install_drupal(Array) [0.26 sec, 8.03 MB] [debug] WD php: Exception: To start over, you must empty your existing [error] database.To install to a different database, edit the appropriate settings.php file in the sites folder.To upgrade an existing installation, proceed to the update script.View your existing site. in install_begin_request() (line 301 of /Users/me/Documents/workspace/proto/includes/install.core.inc). [0.32 sec, 12.26 MB] WD php: Warning: Cannot modify header information - headers already [warning] sent by (output started at /Users/me/.composer/vendor/drush/drush/includes/output.inc:38) in drupal_send_headers() (line 1233 of /Users/me/Documents/workspace/proto/includes/bootstrap.inc). [0.32 sec, 12.29 MB] Exception: <ul><li>To start over, you must empty your existing database.</li><li>To install to a different database, edit the appropriate <em>settings.php</em> file in the <em>sites</em> folder.</li><li>To upgrade an existing installation, proceed to the <a href="http://test_site.test.com/update.php">update script</a>.</li><li>View your <a href="http://test_site.test.com">existing site</a>.</li></ul> in install_begin_request() (line 301 of /Users/me/Documents/workspace/proto/includes/install.core.inc). Drush command terminated abnormally due to an unrecoverable error. [error] [0.32 sec, 12.27 MB] drush: Command // /Users/me/.composer/vendor/drush/drush/drush --root=/Users/me/Documents/workspace/proto -y si --debug my_profile --db-url=mysql://root:root@localhost/test_site.test.com -l test_site.test.com --sites-subdir=test_site.test.com --account-name=admin --account-pass=admin --site-mail=system_contact@example.fr // failed

  • gross. all your php code I just do in Bash. The way god intended :D. I mean drush is a bash (or Shell) tool. I'm not sure what benefit you get by trying to invoke drush through a php script -- other than not needing to learn Bash. – tenken Apr 30 '15 at 14:58
  • run your si command with --debug and you will get more information on why/how mysql is not found. – tenken Apr 30 '15 at 15:00
  • @tenken I actually converted my script from Bash to a Drush based script hoping it would make thing easier / better bc I encountered issues with my bash script as well .. I'll check the --debug if it can give more information – Pascal Liu Apr 30 '15 at 22:47
  • Ok so the debug didn't give me more details - the only thing we see is that it fails when it's trying to call mysql command - I'll add the full output to the the original post – Pascal Liu Apr 30 '15 at 23:07
0

Ok so I managed to make my script work by adding a PATH=MYPATH.... && before calling my drush site-install command.

This way I make sure my PATH contains all the necessary bins when running the command.

I'm sure there is a "cleaner" way to do it, but adding the path "inline" do the trick

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.