Vagrant
HOW TO SET UP A VAGRANT DEVELOPMENT SYSTEM
Paul Bearne @pbearne
Freelance 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
Scripting
AUTOMATE 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 ….
DEMO
JUST 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 updater
https://github.com/cogitatio/vagrant-hostsupdater
vagrant plugin install vagrant-hostsupdater
 Guest Editions
https://github.com/dotless-de/vagrant-vbguest
vagrant plugin install vagrant-vbguest
 Dashboard
https://github.com/topdown/VVV-Dashboard
VVV bits : vagrant add-ons
 VVV Site Wizard
https://github.com/aliso/vvv-site-wizard
vvv -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 demo
THE VAGRANTFILE FROM VARYING-VAGRANT-VAGRANTS
VVV on windows problems
Dos line ends
sudo dos2unix /home/vagrant/bin/*
SVN fetch fails with DB errors
svn 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.php
phpunit --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/pbearne
Email: pbearne@gmail.com

Vagrant WordCamp Hamilton

  • 1.
    Vagrant HOW TO SETUP A VAGRANT DEVELOPMENT SYSTEM
  • 2.
    Paul Bearne @pbearne FreelanceSr. 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
  • 3.
    Real-time Publishing forWordPress Livepress.com
  • 4.
    eLearning Solutions Poweredby WordPress UncannyOwl.com
  • 5.
    Where do youdevelop your sites?
  • 6.
    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
  • 7.
    Why use Vagrant? Noneed 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.
  • 8.
    Vagrant “Vagrant is atool 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
  • 9.
    Host Computer Virtualbox Shared Folder/usr/www/siteC:/user/document/code Point Source control Here Point editor / IDE Here Run Unit Tests Here Point Web browser Here Telnet client / vagrant ssh
  • 10.
    Install Vagrant: http://downloads.vagrantup.com/ VirtualBox: https://www.virtualbox.org/ Plusa configuration file Note: Sometimes problems with latest version VirtualBox on windows
  • 11.
    THE BASIC COMMANDLINE $ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant up $ vagrant destroy
  • 12.
  • 13.
    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 ….
  • 16.
  • 17.
    VVV bits :internal commands  Default WP Login/password: admin/password  Db account: wp/wp xdebug_on/ xdebug_off (via ssh shell)  Makepot
  • 18.
    VVV bits :Tools  Hosts updater https://github.com/cogitatio/vagrant-hostsupdater vagrant plugin install vagrant-hostsupdater  Guest Editions https://github.com/dotless-de/vagrant-vbguest vagrant plugin install vagrant-vbguest  Dashboard https://github.com/topdown/VVV-Dashboard
  • 19.
    VVV bits :vagrant add-ons  VVV Site Wizard https://github.com/aliso/vvv-site-wizard vvv -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
  • 20.
    Config demo THE VAGRANTFILEFROM VARYING-VAGRANT-VAGRANTS
  • 21.
    VVV on windowsproblems Dos line ends sudo dos2unix /home/vagrant/bin/* SVN fetch fails with DB errors svn 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”
  • 22.
    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
  • 23.
    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" ]
  • 24.
  • 25.
    https://make.wordpress.org/core/handbook/automated-testing/ <?php class SampleTest extendsWP_UnitTestCase { function testSample() { // replace this with some actual testing code $this->assertTrue( true ); } }
  • 26.
    PHPUnit Commands phpunit --list-groups phpunit–groups ****** phpunit –verbose phpunit –filter text
  • 27.
  • 28.
    Vagrant ssh $ cd/srv/www/wordpress-devolop/ phpunit --group functions.php phpunit --group 28666 Run WordPress core unit tests
  • 29.
  • 30.
    Vagrant ssh $ cd/srv/www/wordpress-trunk/ $ wp scaffold plugin-tests hello $ cd wp-content/plugins/hello/ $ phpunit Add Unit tests to a plugin
  • 31.
    class MyTestClass extendsPHPUnit_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
  • 32.
    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
  • 33.
    Vagrant ssh $ makepotwp-plugin /srv/www/wordpress- trunk/wp-content/plugin/hello/ $ makepot wp-theme /srv/www/wordpress- trunk/wp-content/themes/twentyfifteen/ Makepot on VVV
  • 34.
  • 35.
    1. Use anIDE 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/
  • 36.
  • 37.
    What is comingnext? Docker : www.docker.com Slides: http://flightless.us/wcmia2015/ Not ready for windows yet 
  • 38.
  • 39.

Editor's Notes

  • #3 Some of smallest patches
  • #4 I am freelance so I need clients that will pay me to allow me to talk at WordCamp. These are 2 clients that I help with their hard problems that you may find useful LivePress is real time microblogging that is native on WordPress. And is available as part of WordPress.com VIP platform.
  • #5 Uncanny Owl are eLearning Experts that can help you and your clients provide eLearning solutions
  • #6 So where do you edit code
  • #18 SPLIT TO 3 SLIDES
  • #19 SPLIT TO 3 SLIDES
  • #20 SPLIT TO 3 SLIDES
  • #38 Much lighter than Vagrant more option but still early