14

In Drupal 8 the Drush command drush variable-set no longer works.

From reading (here) it appears that Drupal 8 has a new "configuration" system that replaces the old (Drupal <=7) "variables". But what is the new Drush command to achieve the same ends?

Specifically I want to convert the commands:

drush variable-set site_mail someone@email.com
drush variable-set update_notify_emails someone@email.com

to the new Drupal8/Drush8 equivalent...

17

Following some more research it seems the new command is:

  • drush config-set <config-name> <key> (where the old format was drush variable-set <name> <value>). Alias: cset.

So I'm not totally sure that I have this right (so comment and/or another answer from someone who does would be great...), but it seems that the config that includes emails are: contact.form.feedback recipients, update.settings notification.emails and system.site mail.

This update is the result for some good discussion (below). Note that some settings are arrays (rather than strings):

www/drupal8# drush config-get update.settings notification
'update.settings:notification':
  emails:
    - admin@example.com
  threshold: all

to update this you need to run:

drush -y config-set update.settings notification.emails.0 admin2@example.com

Source: Leverage Drush 7 for Drupal 8.

Note: Drush 7 no longer supports Drupal 8, but this still applies.

  • 1
    There's also drush cedit, that allows you to edit the file in an editor. I guess you'd need notification.emails.0 or so to set it to a list, not sure. – Berdir Jul 2 '15 at 8:32
  • The changed format may cause your notifications to fail. In the original case email is an array containing admin@example.com (i.e. multiple email addresses), but in your result you've turned email into a string containing admin2@example.com (i.e. single email address). – Alma Jul 6 '15 at 17:32
  • @Alma - Thanks for the heads up. How do I make sure that it get's entered as an array? – Jeremy Davis Jul 7 '15 at 1:28
  • 1
    Yes. Berdir's solution works. So you'd do "drush config-set update.settings notification.emails.0 admin@example.com". Just tested it myself now. – Alma Jul 7 '15 at 15:43
  • 1
    A drush config-list will print every possible category of configuration for you to parse through. In case you are ever in need of finding them all. – Eric Steinborn Aug 8 '16 at 18:52
5

Additional follow-up,

To find the identifiers for the config to get or set,

  • You can NO LONGER guess at the machine names of variables just by inspecting system settings forms. There used to be a 1:1:1 match between the form element seen on many config screens, the $config['varname'] you could put into $settings.php, and drush vset/vget
  • The config manager in the ui (found at admin/config/development/configuration/single ) provides something of a variable browser.

I wanted to update my local.settings.php to always disable css & js aggregation when downsyncing.

D7 :

$conf['preprocess_css'] = FALSE;
$conf['preprocess_js'] = FALSE;

D8 :

$config['system.performance']['css']['preprocess'] = 0;
$config['system.performance']['js']['preprocess'] = 0;

(And note that this type of override WILL NOT show up in your Admin UI, or in drush config-get ... though it will take effect)

  • Drush command for disabling aggregation then is: drush -y config-set system.performance css.preprocess 0 && drush -y config-set system.performance js.preprocess 0 – leymannx Aug 1 '16 at 11:39
3

This worked for me. It's a Drush PHP EVAL command.

drush ev '\Drupal::state()->set("MY_VARIABLE", "MY_VALUE")'

Here it's being used to set the state of MY_VARIABLE

You can also get the state of a variable:

drush ev 'echo \Drupal::state()->get("MY_VARIABLE")'

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.