ddev composer config --json --merge extra.drupal-scaffold.allowed-packages '["augustash/ddev-drupal"]' && ddev composer config scripts.ddev-setup "Augustash\\Ddev::postPackageInstall" && ddev composer config scripts.post-update-cmd "Augustash\\Ddev::postUpdate" && ddev composer require --dev augustash/ddev-drupal && ddev composer ddev-setupWhy scalar
composer config, not--json? The two script values contain backslashes (theAugustash\Ddevnamespace separator). Passing them as inline JSON throughddev composer config --json '[...]'lets the double shell (host → container) eat the backslashes, so Composer stores the value as a quoted string —"[\"Augustash\\Ddev::postUpdate\"]"— instead of an array. The nextcomposer updatethen fails withClass "[\"Augustash\Ddev ... is not autoloadable. The scalar form above sidesteps it: a single hook is a valid scalar script value. (Theallowed-packagesline keeps--jsonsafely — it has no backslashes.)Already have a
post-update-cmd? (e.g. a PantheonDrupalComposerManaged\ComposerScripts::postUpdatehook) the scalar command replaces it. Skip that one segment and instead addAugustash\Ddev::postUpdateto the existing array by editingcomposer.jsondirectly, so both hooks run:"post-update-cmd": [ "DrupalComposerManaged\\ComposerScripts::postUpdate", "Augustash\\Ddev::postUpdate" ]
The generated scaffolding and hooks refresh automatically on every
composer update: the post-update-cmd hook (Augustash\Ddev::postUpdate)
re-runs setup in update mode without re-prompting. So pulling the latest
ddev-drupal is normally all you need:
ddev composer update augustash/ddev-drupalUpdate mode keeps your existing config.yaml values (client code, docroot,
Drupal/PHP version, subdomains) and only rebuilds what may have changed —
Selenium, BrowserSync, Solr (if already enabled), the Terminus image, and the
Pantheon add-on hook (upgraded in place to track develop). Run ddev restart
afterward to rebuild the containers and re-pull add-ons.
To force a refresh without updating the package — or to run the one-time
wkhtmltopdf→dompdf migration, which the automatic hook skips — re-run setup
manually in update mode (-u):
ddev composer ddev-setup -- -uOmit -u to be re-prompted for the configuration values (the original setup
flow):
ddev composer ddev-setupThe zoo service moved from the legacy Bitnami image to the official multi-arch
zookeeper:3.9 image (fixes the linux/amd64 platform warning on Apple Silicon).
The data path changed from /bitnami/zookeeper to /data, so the existing volume
must be recreated. After updating the add-on, run:
ddev stop && docker volume rm "ddev-$(ddev describe -j | jq -r .raw.name)_zoo" && ddev startThe post-start ddev solrcollection hook will repopulate the configset and
recreate the collection in the fresh ZK store.
On ddev-setup, you will be prompted for:
- Client code
- Document root (defaults to
web) - Drupal version
- PHP version
- Is this site hosted on Pantheon? — if yes:
- Pantheon site name
- Pantheon site environment
- Subdomains (optional)
- Solr support
These are used to set config.yaml ddev configuration.
Database pull is handled by the ddev-pantheon-db add-on, which is automatically installed on ddev start.
Will not download if there is more than one table in the existing local db.
To force a fresh pull:
ddev db -f
- Rerun ddev start.
- The key part is 'Drush was unable to query the database'.
- Make sure you do not have database credentials in settings.local.
- You have an empty database, partial import, something is wrong with it.
- Download a fresh database.
Failed to execute command drush en search_api_solr_admin -y.
Failed to execute command drush sapi-sl --field=id:.
Failed to execute command drush solr-upload-conf.
- Run composer require drupal/search_api_solr_admin -W.
- Run ddev solrcollection.
- An existing solr server is configured as a database server.
- Remove this server and create a new solr cloud server.
- Ensure your settings.local overrides are correct.
- The server 'local' does not exist.
- Comment out configuration overrides in settings.local.php.
- Start ddev, create the server [name].
- Assign the following values:
- Server name: local
- Backend: solr
- Configure Solr Backend: Solr Cloud with Basic Auth
- Default Solr Collection: search
- Username: solr
- Password: SolrRocks
- Assign the following values:
- Uncomment configuration values.
- Make sure [name] matches the configuration overrides, in all respective lines.
- Ex. $config['search_api.index.global']['server'] = [name];
- Ex. $config['search_api.server.[name]']['backend_config']['connector'] = 'solr_cloud_basic_auth';
- Run: ddev solrcollection
- Start ddev, create the server [name].
- Build version was changed to 8.8.2 to match Pantheon hosts exact version.
- Recreate your collection.
- Navigate in your browser to http://[site-name].ddev.site:8983/solr/#/~collections.
- Delete existing collection.
- Run ddev solrcollection.
- Navigate in your browser to http://[site-name].ddev.site:8983/solr/#/~collections.
- Reload your collection.
- Navigate to http://[site-name].ddev.site/admin/config/search/search-api/server/[server-name].
- Click 'Reload Collection'.
- Server version should now be 8.8.2.
- Navigate to http://[site-name].ddev.site/admin/config/search/search-api/server/[server-name].
- Recreate your collection.
TypeError: Drupal\search_api_solr\Utility\SolrCommandHelper::__construct(): Argument #4 ($configset_controller) must be of type Drupal\search_api_solr\Controller\SolrConfigSetController.
- Update drupal/search_api_pantheon.