Vagrant WordCamp Hamilton

Preview:

Citation preview

VagrantHOW TO SET UP A VAGRANT DEVELOPMENT SYSTEM

Paul Bearne @pbearneFreelance Sr. Full Stack WordPress Developer Plugin author of Author Avatars List ( http://wordpress.org/plugins/author-avatars/ )WP Site Verification tool ( http://wordpress.org/plugins/wp-site-verification-tool/ )Core contribs In WordPress versions 3.9, 4.0 and 4.2

Real-time Publishing for WordPress

Livepress.com

eLearning Solutions Powered by WordPress

UncannyOwl.com

Where do you develop your sites?

Test PHP versions add_action( 'init', function () {

remove_post_type_support( 'post', 'editor' );

}, 99 );◦ Needs PHP 5.2 + : Parse error: syntax error, unexpected T_FUNCTION

$result = $this->multidimensional( &$root, $keys, true );◦ Breaks in PHP 5.4 + : Fatal error: Call-time pass-by-reference has been removed

Why use Vagrant?

No need to have a web server installed.You can match the configuration of production server.Project isolation - one Vagrant setup per project.Version isolation - more than one version of WordPress.Works the same on PC/Mac or Linux.

Vagrant

“Vagrant is a tool for building complete development environments. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases development/production parity, and makes the 'works on my machine' excuse a relic of the past.”

http://www.vagrantup.com/about.html

Host Computer

Virtualbox

Shared Folder/usr/www/site C:/user/document/code

Point Source control Here

Point editor / IDE

Here

Run Unit Tests Here

Point Web

browser Here

Telnet client / vagrant ssh

Install

Vagrant: http://downloads.vagrantup.com/ VirtualBox: https://www.virtualbox.org/ Plus a configuration file

Note: Sometimes problems with latest version VirtualBox on windows

THE BASIC COMMAND LINE

$ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant up

$ vagrant destroy

ScriptingAUTOMATE THE CONFIG

Options• varying-vagrant-vagrants (VVV) : https://github.com/Varying-Vagrant-Vagrants/VVV

• vip-quickstart : https://github.com/Automattic/vip-quickstart

• Salty-WordPress : https://github.com/humanmade/Salty-WordPress

• Mercury Vagrant (HGV) : https://github.com/wpengine/hgv

• roots/bedrock-ansible : https://github.com/roots/bedrock-ansible

• Roll your own https://puphpet.com/

• more ….

DEMOJUST RUN IT

VVV bits : internal commands Default WP Login/password: admin/password

Db account: wp/wp

xdebug_on/ xdebug_off (via ssh shell)

Makepot

VVV bits : Tools Hosts updaterhttps://github.com/cogitatio/vagrant-hostsupdatervagrant plugin install vagrant-hostsupdater

Guest Editionshttps://github.com/dotless-de/vagrant-vbguestvagrant plugin install vagrant-vbguest

Dashboardhttps://github.com/topdown/VVV-Dashboard

VVV bits : vagrant add-ons VVV Site Wizardhttps://github.com/aliso/vvv-site-wizardvvv -a create -n mysite -d mysite.dev -v 3.9.1 –x

VV Site Wizard https://github.com/bradp/vv New fork of VVV site wizard

Vagrant Manager for OS X. http://vagrantmanager.com

Config demoTHE VAGRANTFILE FROM VARYING-VAGRANT-VAGRANTS

VVV on windows problemsDos line endssudo dos2unix /home/vagrant/bin/*

SVN fetch fails with DB errorssvn cleanup need to be run

Windows 8 – hosts file need to be unprotect in window defender

SVN version can be different

Use “git bash” not “cmd”

Vagrant Commands Vagrant up

◦ Start

Vagrant Suspend / resume◦ pause/play

Vagrant halt◦ turn off

Vagrant destroy◦ wipeout

Vagrant status◦ is it up

Vagrant int◦ create empty config file

Vagrant box◦ manage

Lets be tidy : use a “Customfile”

config.vm.synced_folder "../hello", "/srv/www/wordpress-default/wp-content/plugins/hello", :owner => "www-data", :mount_options => [ "dmode=775", "fmode=774" ]

config.vm.synced_folder "../hello", "/srv/www/wordpress-trunk/wp-content/plugins/hello", :owner => "www-data", :mount_options => [ "dmode=775", "fmode=774" ]

config.vm.synced_folder "../hello", "/srv/www/wordpress-develop/src/wp-content/plugins/hello", :owner => "www-data", :mount_options => [ "dmode=775", "fmode=774" ]

PHPUnit

https://make.wordpress.org/core/handbook/automated-testing/

<?php

class SampleTest extends WP_UnitTestCase {function testSample() {

// replace this with some actual testing code$this->assertTrue( true );

}}

PHPUnit Commands phpunit --list-groups

phpunit –groups ******

phpunit –verbose

phpunit –filter text

Core Test demo

Vagrant ssh

$ cd /srv/www/wordpress-devolop/phpunit --group functions.phpphpunit --group 28666

Run WordPress core unit tests

PHPUnit plugin demo

Vagrant ssh

$ cd /srv/www/wordpress-trunk/$ wp scaffold plugin-tests hello$ cd wp-content/plugins/hello/$ phpunit

Add Unit tests to a plugin

class MyTestClass extends PHPUnit_Framework_TestCase { public function setUp() { \WP_Mock::setUp(); }

public function tearDown() { \WP_Mock::tearDown(); }}

\WP_Mock::onFilter( 'the_content' )->with( 'Windows Rocks!' )->reply( 'Apple Rocks!' );

wp_mock

https://github.com/10up/wp_mock

public function test_content_filter() { \WP_Mock::onFilter( 'the_content' )->with( 'Windows Rocks!' )->reply( 'Apple Rocks!' );

$post = new stdClass; $post->post_content = 'Windows Rocks!'; setup_postdata( $post );

$content = get_the_content();

$this->assertEquals( 'Apple Rocks!', $content ); }

wp_mock test example

https://github.com/10up/wp_mock

Vagrant ssh

$ makepot wp-plugin /srv/www/wordpress-trunk/wp-content/plugin/hello/

$ makepot wp-theme /srv/www/wordpress-trunk/wp-content/themes/twentyfifteen/

Makepot on VVV

Makepot demo

1. Use an IDE

2. Configure your IDE

3. Enable xdebug

4. Set breakpoint

5. Walk the code and variables

6. Fix the code

Debuging

https://wordpress.tv/2014/08/03/aaron-holbrook-introduction-to-ides-and-debugging/

Questions?

What is coming next? Docker : www.docker.com Slides: http://flightless.us/wcmia2015/

Not ready for windows yet

Hire Me...PAUL@BEARNE.COM

Slides@ http://www.slideshare.net/pbearneEmail: pbearne@gmail.com