modernize your drupal development

Post on 25-Jun-2015

273 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Modernize Your Drupal Development

Chris Tankersley

php[world] 2014

2

Who Am I?

● A PHP Developer for 10 Years● Drupal Dev for 4 years● Lots of projects no one uses, and a few

some do● https://github.com/dragonmantank

3

We've got a lot to cover

● Development Environments● Version Control● drush● Coding Standards● Building Better Modules● Moving Out of the Database● Putting it all together

4

Development Environments

5

Local Stack

● Run everything off of your local machine!

● Most performant of the options

6

Local Stack

● Not very portable● More junk on your PC to maintain● Probably not at all like Production

7

Don't use Portable *AMP stacks

8

If you have to...

● Acquia Dev Desktop● Zend Server

9

Acquia Dev Desktop

● Pre-built *AMP Stack● Available for Drupal 6 or 7● Install and Ready to Go

10

Acquia Dev Desktop

● Not built for multiple installs● Can’t use for existing sites● Only for Windows and Mac

11

Zend Server

● Uses OS's server● Has some cool tools like Z-Ray● Mostly a wrapper around the local stack● Support!● Has a Development and Production

version

12

Zend Server

● Weird issues with permissions● Works best with other Zend tools● Pricey

13

How it looks

Your OS

Applications

Your App

Web Server DB Server

14

docker

● Containers for applications● Makes deployment very easy● Very easy to get set up● Way more performant than VMs

15

docker

● If you're not on Linux, think really hard about using

● Mostly a deployment fixer

16

How it looks - Linux

Your OS

Applications

Your App

Web Server DB Server

17

How it looks – Everywhere Else

Your OS

Applications Virtualization Layer

Virtualized OS

Your App

Web Server DB Server

18

vagrant

● Full server to run code● Self contained and can be replicated● Most modern machines can do VM

19

vagrant

● Uses more resources● Easier to break● When it breaks, it breaks hard

20

How it looks

Your OS

Applications Virtualization Layer

Virtualized OS

Your App

Web Server DB Server

21

A quick demo

22

Considerations

● How special is my Production environment?● What resources do my dev machines have?● How many things am I working on?● What's the tech level of my coworkers?● What's the tech level of my clients?

23

Version Control

24

What is version control?

● Some system that keeps track of changes to source code

25

Many different systems

● Git● Subversions● Mercurial

26

It doesn't matter which one you use

27

A Quick Demo

28

Workflows

● Github/Pull Request● Gitflow● Rebase

29

GitHub Workflow

30

For more info...

https://guides.github.com/introduction/flow/index.html

31

Rebase Workflow

32

For more info...

http://randyfay.com/content/rebase-workflow-git

33

gitflow

34

masterdevelop

Tag: 0.9.2

v0.9blog_rework staff_page

Tag: 1.0.0

v1.0

Tag: 0.9.3

35

For more info...

http://nvie.com/posts/a-successful-git-branching-model/

36

Jeff Carouth's „Git and Github – Working Effectively on a Team“

https://speakerdeck.com/jcarouth/git-and-github-working-effectively-on-a-team-at-php-

tek-2014

37

Any questions?

38

Are we finally ready for some actual Drupal?

39

40

drush

41

What is drush?

42

What is drush?

● Command line interface for (much of) Drupal

● Allows modules to be CLI driven● Much, much quicker than the GUI

43

How does it work?

44

Common Commands

45

Download Drupal

$ drush dl drupal --drupal-project-rename="drupal"Project drupal (7.32) downloaded to /vagrant/drupal-7.32. [success]Project drupal contains: [success] - 3 profiles: testing, standard, minimal - 4 themes: stark, seven, garland, bartik - 47 modules: drupal_system_listing_incompatible_test, drupal_system_listing_compatible_test, user, update, trigger, translation, tracker, toolbar, taxonomy, system, syslog, statistics, simpletest, shortcut, search, rdf, profile, poll, php, path,overlay, openid, node, menu, locale, image, help, forum, filter, file, field_ui, text, options, number, list, field_sql_storage, field, dblog, dashboard, contextual, contact, comment, color, book, blog, block, aggregator

46

Install Drupal

$ drush site-install standard -y --db-url=mysql://drupal:DrupalR0cks@localhost/drupaldb --account-name=admin --account-pass=admin --site-name="My Drupal Site" --site-mail=youremail@domain.com

47

Run a development server

$ drush runserver 8080

$ drush runserver 0.0.0.0:8080

48

Watching the Watchdog

// Show the last 10 messages

$ drush watchdog-show

// Show the last 50 messages

$ drush watchdog-show --count=50

// Show only entries of a specific severity

$ drush watchdog-show --severity=notice

// Search for a specific message

$ drush watchdog-show "cron run successful"

49

Viewing Watchdog Entries

$ drush watchdog-show 54

ID : 54

Date : 30/Jan 22:10

Type : system

Severity : info

Message : overlay module disabled.

50

Cleaning Up After the (Watch)dog

// Destroy it all!

$ drush watchdog-delete all

// Delete a specific one to hide an error you generated that no one can know about

$ drush watchdog-delete 50

// Delete all messages containing a string

$ drush watchdog-delete "cron run successfull"

// Delete everything of a specific severity

$ drush watchdog-delete --severity=debug

51

Working with modules

$ drush pm-download backup_migrate

$ drush pm-enable backup_migrate

$ drush pm-update

52

drush Aliases

● Allows you to tell drush where an external site is located at

● Requires drush on the other end, and shell access

53

Creating an alias

// sites/all/drush/prod.alias.drushrc.php

$aliases['prod'] = array(

'uri' => 'mysite.com',

'root' => '/public_html/',

'remote-host' => '10.0.2.2',

'remote-user' => 'mysite',

);

54

Using an alias

$ drush @prod status

PHP configuration : /Applications/acquia-drupal/php5_3/bin/php.ini

Drush version : 5.7

Drush configuration :

55

Common uses for aliases

$ drush rsync sites/default/files/ @prod:sites/default/files

$ drush sql-sync @prod @self

$ drush @prod site-install standard [...]

56

Deploying code with drush

$ drush rsync @self @prod

You will destroy data from ctankersley@10.0.2.2:'~/Sites/deploy/' and replace with data from /vagrant/

Do you really want to continue? (y/n): y

57

Questions?

58

Coding Standards

59

Huh?

Coding standards are a list of rules regarding the layout and structure of source code.

60

What?

● Two space indents● Spaces between casts

– $id = (int) $_POST['id'];

● Not using else if, using elseif● Always using curly braces on control

structures

61

Why?

● Makes it easy to read code● Makes it easy to merge code● You're on a team, act like it● If you want your code on drupal.org, you're

going to need to follow it● If you want to contribute, you'll need to follow it

62

For the nitty-gritty...

● https://www.drupal.org/coding-standards

63

Tools

● Code Sniffer with Drupal rules● Coder● PAReview● Grammer Parser

64

Code Sniffer

● Compares your code to some coding standard

● General PHP tool, not specific to Drupal● CLI

65

Code Sniffer

https://www.drupal.org/node/1419988

66

Demo Time

67

Coder

● GUI to check your code against coding standards

● https://www.drupal.org/project/coder

68

Demo Time

69

PAReview

● Project Application Review● First line of defense against bad

modules● Online code sniffer for drupal.org

70

Self Hosted

● Add the Drupal, DrupalSecure, DrupalPractice, and Codespell standards to CodeSniffer

● Download the bash script from Github

71

Install DrupalPractice

$ git clone https://github.com/klausi/drupalpractice.git ~/.drush/drupalpractice

$ ln -sv ~/.drush/drupalpractice/DrupalPractice ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/

72

Quick Demo

73

Questions?

74

Building Better Modules

75

Drupal supplies a lot of things for you

● Form API● Schema API● Theme Layer● Unit Testing● Entities

76

Unit Testing

77

How Test Driven Development works

● Write your tests before your code● Watch it fail● Write code to make your test pass● Feel better! (and refactor)

78

TDD In Drupal

● Drupal ships with SimpleTest baked in● Supports unit testing and functional testing● Unit tests are done by extending DrupalUnitTestCase

● Functional tests are done by extending DrupalWebTestCase

79

Unit Tests vs Functional Tests

● Unit tests should focus on testing an individual piece of code

● Functional tests should focus on testing output/pages

80

Unit Tests vs Functional Tests

● Unit tests do not bootstrap Drupal, so are very quick

● Functional tests do bootstrap Drupal, so are very slow

81

Downsides to TDD in Drupal

● The GUI is an AJAX runner, which breaks a lot– Use drush for a better experience

● Debugging can be very hard, since the environment is created and destroyed each test– Use $this->verbose() or debug()

82

Let's build a test

83

Let's build a test

84

Caching and Asset Aggregation

● Drupal has a caching layer● Drupal has a basic asset pipeline

85

Turn it on on Performance

86

Turn it on on Performance

87

Caching

● Caching saves a chunk of the render array to the DB

● Caching still requires a DB hit

88

Two Different Caches

● Page caching for full output● Block caching for dynamic content

89

Asset Aggregation

● Groups CSS and JS together, reducing HTTP calls

● Will minify the CSS, reducing the transmission size

90

Easy to take advantage of

● Let Drupal know about your files– drupal_add_js()– drupal_add_css()– Through #attached– Add it to your .info file

● Don't just add straight to templates

91

Adding JS

92

Using #attached

93

Entities

● Basic building blocks of 'things' in Drupal

● You already use them● Entity API provides an interface for

making your own

94

Why use them?

● Drupal takes care of a lot of scaffolding● Allows site builders to extend them

95

What is an entity?

● A [Drupalized] thing● Series of classes and functions that tell

Drupal how to deal with your thing

96

What do we need?

● A dependency on the Entities module

97

A place to store things...

98

And now we create a class for our entity

99

And now we tell Drupal about it

100

Let's create an admin form

101

Now let's use it!

102

Moving Out of the Database

103

The Database Sucks

● Drupal stores a lot of things in the database

● Databases are hard to version● Database info is hard to move

104

Features!

● Features allow you to package up stuff into modules

● Makes deploying code much easier

105

Bundle things together

106

Bundle lots of things

107

108

Questions?

109

Thanks!

● http://joind.in/talk/view/11901● @dragonmantank● chris@ctankersley.com

top related