The document discusses environments and version control for web development. It provides an overview of common version control systems like Git, Subversion, and Mercurial. It also discusses benefits of using different environments like local, staging, and production for development and testing. Maintaining consistent databases and file paths across environments is challenging but using source control and multiple environments is still considered worthwhile.
21. WE USE GIT
Linux jQuery Rails Android
21 ERIKREAGAN • EECI
22. WE USE GIT
And so do the cool kids
Linux jQuery Rails Android
21 ERIKREAGAN • EECI
23. WE USE GIT
And so do the cool kids
Linux jQuery Rails Android
21 ERIKREAGAN • EECI
24. OLD WAY Single Developer
1. Duplicate index.html
2. Test changes
3. (Maybe save a backup of the previous version)
4. Save over old version losing previous state
22 ERIKREAGAN • EECI
25. NEW WAY Single Developer
1. Change and save the file contents
(Retain history of file for future use)
23 ERIKREAGAN • EECI
26. OLD WAY Development Team
1. Bob changes part of index.html
2. Suzie changes a different part of index.html
3. Bob and Suzie carefully merge changes together
4. Overwrite old version of index.html
24 ERIKREAGAN • EECI
27. NEW WAY Development Team
1. Change and save the file contents
(Retain history of file for future use)
25 ERIKREAGAN • EECI
32. “WHAT DO I TRACK?”
VS
“WHAT DO I IGNORE?”
28 ERIKREAGAN • EECI
33. IGNORED FILES
• Operating System files
• Caches
• .htaccess (possibly)
• Custom uploads from EE
• Dynamic images (captchas etc)
29 ERIKREAGAN • EECI
34. .gitignore
# Lame OS files
Thumbs.db
.DS_Store
# EE System cache
/system/expressionengine/cache/*
# Local dev database file
/config/config.local.php
# Custom Upload Directories
/public_html/uploads/*
# Captchas
/public_html/images/captchas
# Asset minification
/public_html/min
30 ERIKREAGAN • EECI
35. TRACKED FILES
• EE System directory
• Add-ons
• Template flat files
• Images, CSS, Javascript & other assets
31 ERIKREAGAN • EECI
36. COMMITS
Create your history
32 ERIKREAGAN • EECI
37. COMMIT TIPS
• Commit o en (common Git practice)
• Write detailed commit messages
• Review commit log when returning to a project a er
a break of any sort
• Review commits of development team members
33 ERIKREAGAN • EECI
39. GOOD COMMIT MESSAGE
Updated config file with new Minimee cache path
directory
This allows our cache path to be dynamicly absolute
based on the environment out code is in.
$config[‘minimee_cache_path’] = $base_path . ‘/min’;
35 ERIKREAGAN • EECI
40. BRANCHING
Keeping things organized
36 ERIKREAGAN • EECI
41. BRANCHING
WORKFLOW
Do what works best for you
Just make sure you do it for a reason
37 ERIKREAGAN • EECI
42. REMOTE BRANCHES
• Destination for your repository / branch
• “Origin” of your repository / branch
• Server environment for your site
• Other team member’s repository / branch
38 ERIKREAGAN • EECI
44. “It's like not wearing a seatbelt in
your car because you haven't had
an accident yet.
Don't be silly, version your work.”
Iain Urquhart / @iain
40 ERIKREAGAN • EECI
45. GIT RESOURCES
• Book: Pragmatic Version Control Using Git
• peepcode.com/products/git
• whygitisbetterthanx.com
• github.com
• More available with the presentation download
41 ERIKREAGAN • EECI
47. AN ENVIRONMENT IS
any server running an instance of your site
43 ERIKREAGAN • EECI
48. COMMON
ENVIRONMENTS
• Production - the public-facing “live” site
• Staging - typically used for a final test
• Development - shared team development
• Local - each developer’s local instance
44 ERIKREAGAN • EECI
54. Devs who keep using environments post-launch
50
29% ERIKREAGAN • EECI
55. WHY DO YOU USE
ENVIRONMENTS?
51 ERIKREAGAN • EECI
56. “Local development is incredibly
fast and you don't have to worry
about setting up crazy conditionals
and memeber preferences to hide
what you are working on on the live
site.”
52 ERIKREAGAN • EECI
57. “Multiple environments allow us to
build locally without affecting others
and preview new features to clients -
without losing the ability to quickly
apply updates to the current live
site.”
53 ERIKREAGAN • EECI
58. “Automated deployments and
multiple environments are essential
to any agile-oriented developer.
They save time, reduce errors and
streamline site maintenance.”
54 ERIKREAGAN • EECI
59. GETTING SET UP
What is potentially unique to each environment?
55 ERIKREAGAN • EECI
60. GETTING SET UP
What’s Unique?
• Server paths
• URL root
• EE upload paths
• Debug mode intentions
• URI support (PATH_INFO)
• Cache settings
56 ERIKREAGAN • EECI
62. GETTING SET UP
What can be changed?
✓ Server paths
✓ URL root
- EE upload paths
✓ Debug mode intentions
✓ URI support (PATH_INFO)
✓Cache settings
58 ERIKREAGAN • EECI
63. GETTING SET UP
Directory and file structure
/config/
config.env.php
config.master.php
config.{ENV}.php
/public_html/
/system/
/tpl/
59 ERIKREAGAN • EECI
64. GETTING SET UP
config.env.php sample
if ( ! defined('ENV'))
{
switch ($_SERVER['HTTP_HOST']) {
case 'focuslabllc.com' :
define('ENV', 'prod');
define('ENV_FULL', 'Production');
define('ENV_DEBUG', FALSE);
break;
case 'ohsnap.focuslabllc.com' :
define('ENV', 'stage');
define('ENV_FULL', 'Staging');
define('ENV_DEBUG', FALSE);
break;
default :
define('ENV', 'local');
define('ENV_FULL', 'Local');
define('ENV_DEBUG', TRUE);
break;
}
}
60 ERIKREAGAN • EECI
65. GETTING SET UP
config.dev.php sample
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Development config overrides & db credentials
*
* Our database credentials and any environment-specific overrides
*
* @package Focus Lab Master Config
* @version 1.1
* @author Erik Reagan <erik@focuslabllc.com>
*/
$env_db['hostname'] = 'localhost';
$env_db['username'] = '';
$env_db['password'] = '';
$env_db['database'] = '';
$config['webmaster_email'] = 'dev@focuslabllc.com';
/* End of file config.dev.php */
/* Location: ./config/config.dev.php */
61 ERIKREAGAN • EECI
66. GETTING SET UP
config.master.php sample
/**
* Template settings
*
* Working locally we want to reference our template files.
* In staging and production we do not use flat files
* (for ever-so-slightly better performance)
* This approach requires that we synchronize templates after
* each deployment of template changes
*/
$env_config['save_tmpl_files'] = (ENV == 'prod') ? 'n' : 'y';
$env_config['tmpl_file_basepath'] = $base_path . '/../tpl/';
$env_config['hidden_template_indicator'] = '_';
62 ERIKREAGAN • EECI
67. GETTING SET UP
config.master.php sample
/**
* Debugging settings
*
* These settings are helpful to have in one place
* for debugging purposes
*/
$env_config['is_system_on'] = 'y';
$env_config['allow_extensions'] = 'y';
$env_config['email_debug'] = (ENV_DEBUG) ? 'y' : 'n' ;
// Show template debugging if we're not in production
$env_config['template_debugging'] = (ENV_DEBUG) ? 'y' : 'n' ;
/**
* Set debug to '2' if we're in dev mode, otherwise just '1'
*
* 0: no PHP/SQL errors shown
* 1: Errors shown to Super Admins
* 2: Errors shown to everyone
*/
$env_config['debug'] = (ENV_DEBUG) ? '2' : '1' ;
63 ERIKREAGAN • EECI
68. GETTING SET UP
config.master.php sample
/**
* 3rd Party Add-on config items as needed
*/
$env_config['minimee_cache_path'] = $base_path . '/min';
$env_config['minimee_cache_url'] = $base_url . '/min';
$env_config['minimee_remote_mode'] = 'auto';
$env_config['minimee_debug'] = 'n';
// Disable minimee in dev but not in staging and production
$env_config['minimee_disable'] = (ENV == 'local') ? 'y' : 'n' ;
// Greeny (auto-updating of upload directory paths)
$env_config['greeny_enabled'] = (ENV == 'prod') ? 'false' :
64 ERIKREAGAN • EECI
76. Devs who say the headaches are worth the trouble
100% ERIKREAGAN • EECI
70
77. DATABASE ISSUES
• New custom fields alter the DB schema
• Installing or updating add-ons can alter the DB
schema
• Updating EE can alter the DB schema
71 ERIKREAGAN • EECI
78. DATABASE ISSUES
• Custom upload directory paths are stored in the DB
and cannot be dynamically altered
• Relative upload directory paths work sometimes, but
not with all add-ons
• “Content” is very likely changing in the Production
environment while you build and test in your other
environments
72 ERIKREAGAN • EECI
80. QUICK TIPS
• You need to understand EE’s database
• Learn about 3rd party add-on’s DB tables
• Establish a ruleset for your workflow
• Understand that there will be exceptions
74 ERIKREAGAN • EECI
83. FINAL NOTES
• These practices make you a better developer
• They help prepare you to work with a team
• They help your team work more efficiently
• You can provide a better service to your clients
77 ERIKREAGAN • EECI