Pantheon.io / Prometsource.com JULY 22-24, 2015 NATIONAL INSTITUTES OF HEALTH CAMPUS BETHESDA, MD Composer Tools and Frameworks for Drupal
Pantheon.io / Prometsource.com Why you should care about composer Today ➢ Dependency Management Hell ➢ Manually Include Classes at runtime ➢ Large unmanagable repository ➢ Composer manages dependencies ➢ Autoloader lazy-includes class files ➢ Repository remains clean and lean With Composer
Pantheon.io / Prometsource.com Composer Tools and Frameworks for Drupal + =+ COMPOSER DRUPAL DRUSH WIN
Pantheon.io / Prometsource.com 4 Who Are We? Greg Anderson Doug Dobrzynski
Pantheon.io / Prometsource.com 5 Who Are We? Allan Chappell Senior Solutions Architect
Pantheon.io / Prometsource.com 6 Agenda ‣What is Composer? ‣Installing Drupal 7 with Composer •composer_vendor + custom-installer •drupal-tangler ‣Managing Your Project
Pantheon.io / Prometsource.com WHAT IS COMPOSER? PART ONE
Pantheon.io / Prometsource.com 8 What Is Composer? An Installer A Dependency Manager An Autoloader { "require": { "php": ">=5.4.0", "symfony/browser-kit": "~2.1", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1", "guzzlehttp/guzzle": ">=4,<6" }, … } Evaluate and select <?php $client = new GuzzleHttpClient(); >=4,<6 guzzlehttp/guzzle 5.* guzzlehttp/guzzle v5.2.0 guzzlehttp/guzzle "autoload": { "psr-4": { "GuzzleHttp": "src/" } }, composer.json
Pantheon.io / Prometsource.com 9 Why Use Composer? ‣Standard ‣Easiest for developers •Dependency resolution •Code updates •Autoloading of classes ‣Composer is being adopted everywhere
Pantheon.io / Prometsource.com 1 What Projects Are Using Composer? Not Using Composer … and many others! http/guzzle fabpot/goutteDrupal Modules Drush Extensions PHP APIs symfony/yaml twig/twig Not Using ComposerUsing Composer
Pantheon.io / Prometsource.com 11 Drupal 7 and Composer Can we do this? ?+ =
Pantheon.io / Prometsource.com 12 Composer Parts of the Whole Composer PHP dependency management software. Packagist A software repository manager. Custom Installer An executable Composer component. Optional. autoload.php A generated file that must be included by your app. composer.json A structured file that defines a project.
Pantheon.io / Prometsource.com 13 Repository Data for Drupal Projects packagist.drupal-composer.org A third-party repository containing data on projects from drupal.org.
Pantheon.io / Prometsource.com 14 Semantic Versioning Drupal Module Version 7.x-1.5 DRUPAL-x.MODULE.MINOR Versions are converted to semantic versioning before being published on packagist.drupal-composer.org. 7.1.5 MAJOR.MINOR.PATCH Composer Version
Pantheon.io / Prometsource.com 15 Comparison with Drush Make composer.json Repository and custom installers (previously explained) Drupal module that provides an autoload strategy (next). Drush Make { "name": "organization/project", "description": "Drupal composer.json file", "repositories": [ { "type": "composer", "url": "http://packagist.drupal-composer.org/" } ], "require": { "davidbarratt/custom-installer": "dev-master", "derhasi/composer-preserve-paths": "0.1.*", "drupal/drupal": "7.*", "drupal/composer_vendor": "7.1.*", "http/guzzle": "~5", "drupal/devel": "7.1.*", }, … } ; Drush make file that uses guzzle ; API api = 2 ; Core core = 7.x ; Drupal project. projects[drupal][type] = core projects[drupal][version] = 7.x projects[drupal][download][type] = git projects[drupal][download][branch] = 7.x ; Modules projects[] = composer_manager projects[] = aws_glacier projects[] = devel
Pantheon.io / Prometsource.com 16 Autoloading in PHP "autoload": { "psr-4": { "GuzzleHttp": "src/" } }, composer.json from guzzlehttp/guzzle autoload_psr4.php generated by Composer via composer install $vendorDir = dirname(dirname(__FILE__)); return array( 'GuzzleHttp' => array($vendorDir . '/guzzlehttp/guzzle/src'), ); Saves one line of code per class - but it’s a very important line! RUN TIME INSTALL TIME <?php include "vendor/autoload.php"; $client = new GuzzleHTTPClient(); php source file that calls GuzzleHTTP $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } Composer autoloader registration called from vendor/autoload.php include $vendorDir . '/guzzlehttp/guzzle/src/Client.php';
Pantheon.io / Prometsource.com 17 Custom Installers for Composer + D7 generalredneck/drupal-libraries-installer-plugin promet/drupal-tangler derhasi/composer-preserve-paths davidbarratt/custom-installer OR OPTIONAL netresearch/composer-patches-plugin Allows composer.json files to specify where components get installed. Allows nested installation of composer libraries (e. g. Drupal modules inside of Drupal core). Installs modules and themes to their standard location in the vendor directory, and symlinks to them from sites/all/modules/contrib or copies them to sites/all/modules/contrib. Allows composer.json files to specify where components get installed. Allows patch files to be applied to Drupal core or contrib modules after Composer installs them.
Pantheon.io / Prometsource.com 18 Adding Composer Support To make this work, we just need to include vendor/autoload.php + =
Pantheon.io / Prometsource.com INSTALLING DRUPAL 7 WITH COMPOSER PART TWO
Pantheon.io / Prometsource.com Searches for composer.json files in every module and dynamically merges them. 20 Composer Options for Drupal 7 composer_autoload composer_manager Fragile Complex Searches for autoload.php files in every module directory and loads them individually.
Pantheon.io / Prometsource.com Writes a settings.php file that loads the correct autoload.php file. Loads the sites/all/vendor/au toload.php file. 21 Better Options for Drupal 7 composer_vendor promet/drupal-tangler Wins! Wins!
Pantheon.io / Prometsource.com 22 Directory Structure mydrupalsite.org composer.json composer.lock htdocs sites default settings.php files all modules We create a new top-level directory for our project, because composer cannot manage dependencies in the same directory as composer.json. We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name. With drupal-tangler
Pantheon.io / Prometsource.com 23 Directory Structure mydrupalsite.org vendor drupal views composer htdocs sites default vendor -> ../../../vendor all modules contrib views -> ../../../../../vendor/drupal/views We put the vendor directory in root because that is the default location for the Composer installer. The directory is organized by vendor name. Each contributed module directory is symlinked to the corresponding directory in vendor. With drupal-tangler
Pantheon.io / Prometsource.com 24 Directory Structure mydrupalsite.org modules custom feature_modules htdocs sites all modules custom -> ../../../../modules/custom feature_modules -> ../../../../modules/feature_modules We put custom modules in the custom directory in the modules directory in root. The feature_modules directory is symlinked to the feature_modules directory in the modules directory in root. With drupal-tangler We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name. The custom directory is symlinked to the custom directory in the modules directory in root.
Pantheon.io / Prometsource.com 25 Directory Structure mydrupalsite.org cnf config.yml.dist config.yml htdocs sites default settings.php We put default configuration for settings in config.yml.dist. We put default configuration for settings in config.yml.dist. The settings.php file is generated by settings_compile from config.yml. If config. yml does not exist, it is generated from config. yml.dist. With drupal-tangler
Pantheon.io / Prometsource.com 26 Use Installation Profiles mydrupalsite.org vendor drupal panopoly htdocs profiles panopoly -> ../../vendor/drupal/panopoly Composer downloads the profile to the drupal directory in the vendor directory. The panopoly directory is symlinked to the panopoly directory in the vendor directory. With drupal-tangler
Pantheon.io / Prometsource.com 27 Directory Structure mydrupalsite.org composer.json composer.lock htdocs sites default settings.php files all modules vendor We create a new top-level directory for our project, because composer cannot manage dependencies in the same directory as composer.json. We will put our Drupal root directory in htdocs. We put the vendor directory in sites/all/vendor because that is where the composer_vendor project expects to find it. With composer_vendor
Pantheon.io / Prometsource.com 28 Place the Vendor Directory composer.json { "require": { … }, "config": { "vendor-dir": "htdocs/sites/all/vendor" }, … } For composer_vendor with a custom-installer
Pantheon.io / Prometsource.com 29 Place Modules and Themes { "require": { "davidbarratt/custom-installer": "dev-master", … }, "extra": { "custom-installer": { "drupal-module": "htdocs/sites/all/modules/contrib/{$name}/", "drupal-theme": "htdocs/sites/all/themes/contrib/{$name}/" }, }, … } composer.json For composer_vendor with a custom-installer
Pantheon.io / Prometsource.com 30 Use Installation Profiles { "require": { "davidbarratt/custom-installer": "dev-master", "drupal/panopoly": "7.1.*", … }, "extra": { "custom-installer": { "drupal-profile": "htdocs/profiles/{$name}/" }, }, … } composer_vendor composer.json For composer_vendor with a custom-installer
Pantheon.io / Prometsource.com 31 Downloading Modules $ drush dl devel Project devel (7.x-1.5) downloaded to sites/all/modules/contrib/devel. Project devel contains 3 modules: devel_generate, devel, devel_node_access. $ composer require drupal/devel '7.*' ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Drush Composer Drush will select the right module major version, but composer require must be told which version to use. Composer require will update the composer.json file before installing the module.
Pantheon.io / Prometsource.com 32 Install a Module from a Private Repository { "repositories": [ { "type": "vcs", "url": "https://github.com/your-org/your-module" } ], "require": { "your-org/your-module": "dev-master" }, … } https://knpuniversity.com/screencast/question-answer-day/create-composer-package composer.json For composer_vendor and drupal-tangler
Pantheon.io / Prometsource.com 33 Add a Patch to a Module { "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "drupal/features": { "7.2.2":[ { "title": "Remove mtime from .info export (added by Drupal 7.33)", "url": "https://www.drupal.org/files/issues/2381739-features-mtime.patch" } ] } } }, … } http://cambrico.net/drupal/using-composer-to-build-your-drupal-7-projects composer.json For composer_vendor and drupal-tangler
Pantheon.io / Prometsource.com 34 Use a Composer Library from a Module 1.Add a composer.json and require the library 2.There is no step two! VERY IMPORTANT - Never try to include an autoload.php file from a plug-in; always leave autoloader management to the application.
Pantheon.io / Prometsource.com 35 Use Composer from a Drush Command 1.Add a composer.json and require the library 2.Call drush_autoload(__FILE__) from your hook_drush_init(). 3.Require your Drush command in the composer.json of the Drupal site it is used in.
Pantheon.io / Prometsource.com Tangler works the same 36 Updating a Site $ drush pm-update $ composer update $ drush updatedb Composer Remember - regardless of how you update your site, always do it on a copy first. Never update directly on the production site! Drush
Pantheon.io / Prometsource.com MANAGING YOUR PROJECT PART THREE
Pantheon.io / Prometsource.com 38 Manage Project Code mydrupalsite.org .git composer.json composer.lock .gitignore cnf config.yml.dist config.yml modules htdocs sites all modules contrib vendor Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update. If you have custom modules, you can commit them in the modules directory. Avoid committing the htdocs directory, which is managed by drupal-tangler With drupal-tangler Commit config.yml.dist. Avoid committing config.yml.
Pantheon.io / Prometsource.com 39 Manage Project Code mydrupalsite.org .git composer.json composer.lock .gitignore htdocs sites all modules custom contrib vendor Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update. If you have custom modules, you can commit them in the custom directory.. Avoid committing composer-managed directories, such as sites/all/modules/contrib and sites/all/vendor. With composer_vendor
Pantheon.io / Prometsource.com 40 Deploy Code Using Composer Local and Remote Dev Environments install clone clone 1 2 3 4 install
Pantheon.io / Prometsource.com 41 Deploy Code Using Rsync Copy code from dev to stage or live rsyncinstallclone 1 2 3
Pantheon.io / Prometsource.com 42 Deploy Code Using Two Repositories Isolate the Provider’s Repository clone installclone commi t rsync pull Deploy with git while maintaining a lean working repository by writing a short deploy script. 2 3 4 1 5 6
Pantheon.io / Prometsource.com 43 Converting an Existing Site $ drush dl composer_generate $ drush @site composer-generate > composer.json $ composer install # Set up settings.php, copy files… $ drush site-install
Pantheon.io / Prometsource.com 44 Creating a New Site drupal-composer/drupal-project $ composer create-project drupal- composer/drupal-project:7.x-dev dir --stability dev --no-interaction # Set up settings.php, copy files… $ drush site-install
Pantheon.io / Prometsource.com 45 Creating a New Site promet/drupal7-framework $ composer create-project promet/drupal7- framework project_name $ vagrant up --provision
Pantheon.io / Prometsource.com 46 Where Do We Go From Here? https://groups.drupal.org/composer http://drupal-composer.org/ https://github.com/drupal-composer https://getcomposer.org/ @greg_1_anderson @dsdobrzynski @general_redneck

Composer tools and frameworks for drupal.ppt

  • 1.
    Pantheon.io / Prometsource.com JULY22-24, 2015 NATIONAL INSTITUTES OF HEALTH CAMPUS BETHESDA, MD Composer Tools and Frameworks for Drupal
  • 2.
    Pantheon.io / Prometsource.com Whyyou should care about composer Today ➢ Dependency Management Hell ➢ Manually Include Classes at runtime ➢ Large unmanagable repository ➢ Composer manages dependencies ➢ Autoloader lazy-includes class files ➢ Repository remains clean and lean With Composer
  • 3.
    Pantheon.io / Prometsource.com ComposerTools and Frameworks for Drupal + =+ COMPOSER DRUPAL DRUSH WIN
  • 4.
    Pantheon.io / Prometsource.com4 Who Are We? Greg Anderson Doug Dobrzynski
  • 5.
    Pantheon.io / Prometsource.com5 Who Are We? Allan Chappell Senior Solutions Architect
  • 6.
    Pantheon.io / Prometsource.com6 Agenda ‣What is Composer? ‣Installing Drupal 7 with Composer •composer_vendor + custom-installer •drupal-tangler ‣Managing Your Project
  • 7.
  • 8.
    Pantheon.io / Prometsource.com8 What Is Composer? An Installer A Dependency Manager An Autoloader { "require": { "php": ">=5.4.0", "symfony/browser-kit": "~2.1", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1", "guzzlehttp/guzzle": ">=4,<6" }, … } Evaluate and select <?php $client = new GuzzleHttpClient(); >=4,<6 guzzlehttp/guzzle 5.* guzzlehttp/guzzle v5.2.0 guzzlehttp/guzzle "autoload": { "psr-4": { "GuzzleHttp": "src/" } }, composer.json
  • 9.
    Pantheon.io / Prometsource.com9 Why Use Composer? ‣Standard ‣Easiest for developers •Dependency resolution •Code updates •Autoloading of classes ‣Composer is being adopted everywhere
  • 10.
    Pantheon.io / Prometsource.com1 What Projects Are Using Composer? Not Using Composer … and many others! http/guzzle fabpot/goutteDrupal Modules Drush Extensions PHP APIs symfony/yaml twig/twig Not Using ComposerUsing Composer
  • 11.
    Pantheon.io / Prometsource.com11 Drupal 7 and Composer Can we do this? ?+ =
  • 12.
    Pantheon.io / Prometsource.com12 Composer Parts of the Whole Composer PHP dependency management software. Packagist A software repository manager. Custom Installer An executable Composer component. Optional. autoload.php A generated file that must be included by your app. composer.json A structured file that defines a project.
  • 13.
    Pantheon.io / Prometsource.com13 Repository Data for Drupal Projects packagist.drupal-composer.org A third-party repository containing data on projects from drupal.org.
  • 14.
    Pantheon.io / Prometsource.com14 Semantic Versioning Drupal Module Version 7.x-1.5 DRUPAL-x.MODULE.MINOR Versions are converted to semantic versioning before being published on packagist.drupal-composer.org. 7.1.5 MAJOR.MINOR.PATCH Composer Version
  • 15.
    Pantheon.io / Prometsource.com15 Comparison with Drush Make composer.json Repository and custom installers (previously explained) Drupal module that provides an autoload strategy (next). Drush Make { "name": "organization/project", "description": "Drupal composer.json file", "repositories": [ { "type": "composer", "url": "http://packagist.drupal-composer.org/" } ], "require": { "davidbarratt/custom-installer": "dev-master", "derhasi/composer-preserve-paths": "0.1.*", "drupal/drupal": "7.*", "drupal/composer_vendor": "7.1.*", "http/guzzle": "~5", "drupal/devel": "7.1.*", }, … } ; Drush make file that uses guzzle ; API api = 2 ; Core core = 7.x ; Drupal project. projects[drupal][type] = core projects[drupal][version] = 7.x projects[drupal][download][type] = git projects[drupal][download][branch] = 7.x ; Modules projects[] = composer_manager projects[] = aws_glacier projects[] = devel
  • 16.
    Pantheon.io / Prometsource.com16 Autoloading in PHP "autoload": { "psr-4": { "GuzzleHttp": "src/" } }, composer.json from guzzlehttp/guzzle autoload_psr4.php generated by Composer via composer install $vendorDir = dirname(dirname(__FILE__)); return array( 'GuzzleHttp' => array($vendorDir . '/guzzlehttp/guzzle/src'), ); Saves one line of code per class - but it’s a very important line! RUN TIME INSTALL TIME <?php include "vendor/autoload.php"; $client = new GuzzleHTTPClient(); php source file that calls GuzzleHTTP $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } Composer autoloader registration called from vendor/autoload.php include $vendorDir . '/guzzlehttp/guzzle/src/Client.php';
  • 17.
    Pantheon.io / Prometsource.com17 Custom Installers for Composer + D7 generalredneck/drupal-libraries-installer-plugin promet/drupal-tangler derhasi/composer-preserve-paths davidbarratt/custom-installer OR OPTIONAL netresearch/composer-patches-plugin Allows composer.json files to specify where components get installed. Allows nested installation of composer libraries (e. g. Drupal modules inside of Drupal core). Installs modules and themes to their standard location in the vendor directory, and symlinks to them from sites/all/modules/contrib or copies them to sites/all/modules/contrib. Allows composer.json files to specify where components get installed. Allows patch files to be applied to Drupal core or contrib modules after Composer installs them.
  • 18.
    Pantheon.io / Prometsource.com18 Adding Composer Support To make this work, we just need to include vendor/autoload.php + =
  • 19.
    Pantheon.io / Prometsource.com INSTALLINGDRUPAL 7 WITH COMPOSER PART TWO
  • 20.
    Pantheon.io / Prometsource.com Searchesfor composer.json files in every module and dynamically merges them. 20 Composer Options for Drupal 7 composer_autoload composer_manager Fragile Complex Searches for autoload.php files in every module directory and loads them individually.
  • 21.
    Pantheon.io / Prometsource.com Writesa settings.php file that loads the correct autoload.php file. Loads the sites/all/vendor/au toload.php file. 21 Better Options for Drupal 7 composer_vendor promet/drupal-tangler Wins! Wins!
  • 22.
    Pantheon.io / Prometsource.com22 Directory Structure mydrupalsite.org composer.json composer.lock htdocs sites default settings.php files all modules We create a new top-level directory for our project, because composer cannot manage dependencies in the same directory as composer.json. We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name. With drupal-tangler
  • 23.
    Pantheon.io / Prometsource.com23 Directory Structure mydrupalsite.org vendor drupal views composer htdocs sites default vendor -> ../../../vendor all modules contrib views -> ../../../../../vendor/drupal/views We put the vendor directory in root because that is the default location for the Composer installer. The directory is organized by vendor name. Each contributed module directory is symlinked to the corresponding directory in vendor. With drupal-tangler
  • 24.
    Pantheon.io / Prometsource.com24 Directory Structure mydrupalsite.org modules custom feature_modules htdocs sites all modules custom -> ../../../../modules/custom feature_modules -> ../../../../modules/feature_modules We put custom modules in the custom directory in the modules directory in root. The feature_modules directory is symlinked to the feature_modules directory in the modules directory in root. With drupal-tangler We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name. The custom directory is symlinked to the custom directory in the modules directory in root.
  • 25.
    Pantheon.io / Prometsource.com25 Directory Structure mydrupalsite.org cnf config.yml.dist config.yml htdocs sites default settings.php We put default configuration for settings in config.yml.dist. We put default configuration for settings in config.yml.dist. The settings.php file is generated by settings_compile from config.yml. If config. yml does not exist, it is generated from config. yml.dist. With drupal-tangler
  • 26.
    Pantheon.io / Prometsource.com26 Use Installation Profiles mydrupalsite.org vendor drupal panopoly htdocs profiles panopoly -> ../../vendor/drupal/panopoly Composer downloads the profile to the drupal directory in the vendor directory. The panopoly directory is symlinked to the panopoly directory in the vendor directory. With drupal-tangler
  • 27.
    Pantheon.io / Prometsource.com27 Directory Structure mydrupalsite.org composer.json composer.lock htdocs sites default settings.php files all modules vendor We create a new top-level directory for our project, because composer cannot manage dependencies in the same directory as composer.json. We will put our Drupal root directory in htdocs. We put the vendor directory in sites/all/vendor because that is where the composer_vendor project expects to find it. With composer_vendor
  • 28.
    Pantheon.io / Prometsource.com28 Place the Vendor Directory composer.json { "require": { … }, "config": { "vendor-dir": "htdocs/sites/all/vendor" }, … } For composer_vendor with a custom-installer
  • 29.
    Pantheon.io / Prometsource.com29 Place Modules and Themes { "require": { "davidbarratt/custom-installer": "dev-master", … }, "extra": { "custom-installer": { "drupal-module": "htdocs/sites/all/modules/contrib/{$name}/", "drupal-theme": "htdocs/sites/all/themes/contrib/{$name}/" }, }, … } composer.json For composer_vendor with a custom-installer
  • 30.
    Pantheon.io / Prometsource.com30 Use Installation Profiles { "require": { "davidbarratt/custom-installer": "dev-master", "drupal/panopoly": "7.1.*", … }, "extra": { "custom-installer": { "drupal-profile": "htdocs/profiles/{$name}/" }, }, … } composer_vendor composer.json For composer_vendor with a custom-installer
  • 31.
    Pantheon.io / Prometsource.com31 Downloading Modules $ drush dl devel Project devel (7.x-1.5) downloaded to sites/all/modules/contrib/devel. Project devel contains 3 modules: devel_generate, devel, devel_node_access. $ composer require drupal/devel '7.*' ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Drush Composer Drush will select the right module major version, but composer require must be told which version to use. Composer require will update the composer.json file before installing the module.
  • 32.
    Pantheon.io / Prometsource.com32 Install a Module from a Private Repository { "repositories": [ { "type": "vcs", "url": "https://github.com/your-org/your-module" } ], "require": { "your-org/your-module": "dev-master" }, … } https://knpuniversity.com/screencast/question-answer-day/create-composer-package composer.json For composer_vendor and drupal-tangler
  • 33.
    Pantheon.io / Prometsource.com33 Add a Patch to a Module { "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "drupal/features": { "7.2.2":[ { "title": "Remove mtime from .info export (added by Drupal 7.33)", "url": "https://www.drupal.org/files/issues/2381739-features-mtime.patch" } ] } } }, … } http://cambrico.net/drupal/using-composer-to-build-your-drupal-7-projects composer.json For composer_vendor and drupal-tangler
  • 34.
    Pantheon.io / Prometsource.com34 Use a Composer Library from a Module 1.Add a composer.json and require the library 2.There is no step two! VERY IMPORTANT - Never try to include an autoload.php file from a plug-in; always leave autoloader management to the application.
  • 35.
    Pantheon.io / Prometsource.com35 Use Composer from a Drush Command 1.Add a composer.json and require the library 2.Call drush_autoload(__FILE__) from your hook_drush_init(). 3.Require your Drush command in the composer.json of the Drupal site it is used in.
  • 36.
    Pantheon.io / Prometsource.com Tanglerworks the same 36 Updating a Site $ drush pm-update $ composer update $ drush updatedb Composer Remember - regardless of how you update your site, always do it on a copy first. Never update directly on the production site! Drush
  • 37.
  • 38.
    Pantheon.io / Prometsource.com38 Manage Project Code mydrupalsite.org .git composer.json composer.lock .gitignore cnf config.yml.dist config.yml modules htdocs sites all modules contrib vendor Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update. If you have custom modules, you can commit them in the modules directory. Avoid committing the htdocs directory, which is managed by drupal-tangler With drupal-tangler Commit config.yml.dist. Avoid committing config.yml.
  • 39.
    Pantheon.io / Prometsource.com39 Manage Project Code mydrupalsite.org .git composer.json composer.lock .gitignore htdocs sites all modules custom contrib vendor Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update. If you have custom modules, you can commit them in the custom directory.. Avoid committing composer-managed directories, such as sites/all/modules/contrib and sites/all/vendor. With composer_vendor
  • 40.
    Pantheon.io / Prometsource.com40 Deploy Code Using Composer Local and Remote Dev Environments install clone clone 1 2 3 4 install
  • 41.
    Pantheon.io / Prometsource.com41 Deploy Code Using Rsync Copy code from dev to stage or live rsyncinstallclone 1 2 3
  • 42.
    Pantheon.io / Prometsource.com42 Deploy Code Using Two Repositories Isolate the Provider’s Repository clone installclone commi t rsync pull Deploy with git while maintaining a lean working repository by writing a short deploy script. 2 3 4 1 5 6
  • 43.
    Pantheon.io / Prometsource.com43 Converting an Existing Site $ drush dl composer_generate $ drush @site composer-generate > composer.json $ composer install # Set up settings.php, copy files… $ drush site-install
  • 44.
    Pantheon.io / Prometsource.com44 Creating a New Site drupal-composer/drupal-project $ composer create-project drupal- composer/drupal-project:7.x-dev dir --stability dev --no-interaction # Set up settings.php, copy files… $ drush site-install
  • 45.
    Pantheon.io / Prometsource.com45 Creating a New Site promet/drupal7-framework $ composer create-project promet/drupal7- framework project_name $ vagrant up --provision
  • 46.
    Pantheon.io / Prometsource.com46 Where Do We Go From Here? https://groups.drupal.org/composer http://drupal-composer.org/ https://github.com/drupal-composer https://getcomposer.org/ @greg_1_anderson @dsdobrzynski @general_redneck