This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
oliverdavies.uk-old-sculpin/docs/blog/2014/11/27/pantheon-settings-files/index.html

303 lines
14 KiB
HTML
Raw Normal View History

2017-07-10 21:28:39 +00:00
<!DOCTYPE html>
<html class="no-js" lang="en-GB">
<head>
<title>Include environment-specific settings files on Pantheon | Oliver Davies</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
2017-07-21 17:44:18 +00:00
<meta property="og:url" content="https://www.oliverdavies.uk/blog/2014/11/27/pantheon-settings-files/">
2017-07-10 21:28:39 +00:00
<meta property="og:title" content="Include environment-specific settings files on Pantheon"/>
2017-07-12 06:22:51 +00:00
<meta property="og:image" content="https://www.oliverdavies.uk/assets/images/me-precedent.jpg"/>
2017-07-10 21:28:39 +00:00
<meta property="og:image:height" content="327"/>
<meta property="og:image:type" content="image/jpg">
<meta property="og:image:width" content="327"/>
2017-07-12 06:22:51 +00:00
<link rel="stylesheet" href="https://www.oliverdavies.uk/assets/css/main.css">
2017-07-14 22:11:03 +00:00
2017-07-10 21:28:39 +00:00
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=57" sizes="57x57">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=114" sizes="114x114">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=72" sizes="72x72">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=144" sizes="144x144">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=60" sizes="60x60">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=120" sizes="120x120">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=76" sizes="76x76">
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=152" sizes="152x152">
<link rel="icon" href="/assets/images/me-precedent.jpg?s=160" sizes="160x160">
<link rel="icon" href="/assets/images/me-precedent.jpg?s=96" sizes="96x96">
<link rel="icon" href="/assets/images/me-precedent.jpg?s=32" sizes="32x32">
<link rel="icon" href="/assets/images/me-precedent.jpg?s=16" sizes="16x16">
</head>
<body class="">
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
2017-07-12 06:22:51 +00:00
<a class="navbar-brand" href="https://www.oliverdavies.uk/">Oliver Davies</a>
2017-07-10 21:28:39 +00:00
</div>
<div id="navbar" class="collapse navbar-collapse" role="navigation">
<ul class="nav navbar-nav">
<li class="">
<a href="/">About</a>
</li>
<li class="">
<a href="/experience">Experience</a>
</li>
<li class="">
<a href="/testimonials">Testimonials</a>
</li>
<li class="">
<a href="/talks">Talks</a>
</li>
<li class="active">
<a href="/blog">Blog</a>
</li>
<li class="">
<a href="/contact">Contact</a>
</li>
</ul>
</div> </div>
</nav>
<div class="container">
<div class="row">
<main class="col-md-9">
<h1>Include environment-specific settings files on Pantheon</h1>
2017-07-11 17:57:51 +00:00
<p class="posted text-light">27th November 2014</p>
2017-07-10 21:28:39 +00:00
<p>I was recently doing some work on a site hosted on <a href="http://getpantheon.com">Pantheon</a> and came across an issue, for which part of the suggested fix was to ensure that the <code>$base_url</code> variable was explicitly defined within settings.php (this is also best practice on all Drupal sites).</p>
<p>The way that was recommended was by using a <code>switch()</code> function based on Pantheon's environment variable. For example:</p>
<pre><code class="language-php">switch ($_SERVER['PANTHEON_ENVIRONMENT']) {
case 'dev':
// Development environment.
$base_url = 'dev-my-site.gotpantheon.com';
break;
case 'test':
// Testing environment.
$base_url = 'test-my-site.gotpantheon.com';
break;
case 'live':
// Production environment.
$base_url = 'live-my-site.gotpantheon.com';
break;
}
</code></pre>
<p>Whilst this works, it doesn't conform to the DRY (don't repeat yourself) principle and means that you also might get a rather long and complicated settings file, especially when you start using multiple switches and checking for the value of the environment multiple times.</p>
<p>My alternative solution to this is to include an environment-specific settings file.</p>
<p>To do this, add the following code to the bottom of settings.php:</p>
<pre><code class="language-php">if (isset($_SERVER['PANTHEON_ENVIRONMENT'])) {
if ($_SERVER['PANTHEON_ENVIRONMENT'] != 'live') {
// You can still add things here, for example to apply to all sites apart
// from production. Mail reroutes, caching settings etc.
}
// Include an environment-specific settings file, for example
// settings.dev.php, if one exists.
$environment_settings = __DIR__ . '/settings.' . $_SERVER['PANTHEON_ENVIRONMENT'] . '.php';
if (file_exists($environment_settings)) {
include $environment_settings;
}
}
</code></pre>
<p>This means that rather than having one long file, each environment has it's own dedicated settings file that contains it's own additional configuration. This is much easier to read and make changes to, and also means that less code is loaded and parsed by PHP. Settings that apply to all environments are still added to settings.php.</p>
<p>Below this, I also include a <a href="/blog/include-local-drupal-settings-file-environment-configuration-and-overrides/">similar piece of code</a> to include a settings.local.php file. The settings.php file then gets committed into the <a href="http://git-scm.com">Git</a> repository.</p>
<p>Within the sites/default directory, I also include an example file (example.settings.env.php) for reference. This is duplicated, renamed and populated accordingly.</p>
<pre><code class="language-php">&lt;?php
/**
* This is a specific settings file, just for the x environment. Any settings
* defined here will be included after those in settings.php.
*
* If you have also added a settings.local.php file, that will override any
* settings stored here.
*
* No database credentials should be stored in this file as these are included
* automatically by Pantheon.
*/
$base_url = '';
</code></pre>
<p>The environment specific files are also committed into Git and pushed to Pantheon, and are then included automatically on each environment.</p>
<p class="tags">
Tags:
2017-07-12 06:22:51 +00:00
<a href="https://www.oliverdavies.uk/blog/tags/drupal">drupal</a>, <a href="https://www.oliverdavies.uk/blog/tags/drupal-planet">drupal-planet</a>, <a href="https://www.oliverdavies.uk/blog/tags/pantheon">pantheon</a>, <a href="https://www.oliverdavies.uk/blog/tags/settings.php">settings.php</a> </p>
2017-07-10 21:28:39 +00:00
<div class="post-pager is-flex">
<div class="is-half">
2017-07-21 17:44:18 +00:00
<a href="/blog/2014/11/20/using-remote-files-when-developing-locally-with-stage-file-proxy-module/">
2017-07-10 21:28:39 +00:00
&laquo; Using Remote Files when Developing Locally with Stage File Proxy Module
</a>
</div>
<div class="is-half text-right">
2017-07-21 17:44:18 +00:00
<a href="/blog/2014/12/20/include-local-drupal-settings-file-environment-configuration-and-overrides/">
2017-07-10 21:28:39 +00:00
Include a Local Drupal Settings file for Environment Configuration and Overrides &raquo;
</a>
</div>
</div>
<div class="about-author">
<h2>About the Author</h2>
2017-07-12 06:24:51 +00:00
<img src="//www.oliverdavies.uk/assets/images/me-precedent.jpg" alt="Picture of Oliver" class="img-circle">
2017-07-10 21:28:39 +00:00
<p>Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a Senior Developer at <a href="https://microserve.io">Microserve</a> and also provides freelance consultancy services for Drupal websites, PHP applications and Linux servers.</p>
</div>
</main>
<div class="col-md-3">
<div class="panel badges text-center">
2017-07-21 17:44:18 +00:00
<a href="https://assoc.drupal.org/membership" title="Im a Drupal Association member." class="is-block">
2017-07-10 21:28:39 +00:00
<img
2017-07-21 17:44:18 +00:00
src="//www.oliverdavies.uk/assets/images/badges/da-individual-member.png"
2017-07-10 21:28:39 +00:00
alt="Drupal Association Individual Member"
2017-07-21 17:44:18 +00:00
width="200"
/>
2017-07-10 21:28:39 +00:00
</a>
2017-07-21 17:44:18 +00:00
<div class="is-flex align-items-center">
2017-07-10 21:28:39 +00:00
<img
2017-07-21 17:44:18 +00:00
src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-developer.png"
alt="Acquia Certified Developer - Drupal 8 Exam Badge"
class="is-2"
/>
2017-07-10 21:28:39 +00:00
2017-07-21 17:44:18 +00:00
<img
src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-back-end.png"
alt="Acquia Certified Back End Specialist - Drupal 8 Exam Badge"
class="is-2"
2017-07-10 21:28:39 +00:00
/>
2017-07-21 17:44:18 +00:00
</div>
2017-07-10 21:28:39 +00:00
2017-07-21 17:44:18 +00:00
<a href="http://conference.phpnw.org.uk/phpnw17" class="is-block">
2017-07-12 06:24:51 +00:00
<img src="//www.oliverdavies.uk/assets/images/badges/phpnw17.png" alt="">
2017-07-10 21:28:39 +00:00
</a>
</div>
<div class="availability panel panel-default">
<div class="panel-heading">Availability</div>
<div class="panel-body">
<p>
<i class="fa fa-thumbs-o-up text-warning"></i>
Currently have limited part-time capacity
</p>
<p>
<i class="fa fa-thumbs-o-down text-danger"></i>
Currently no spare full-time capacity.
</p>
</div>
</div>
<div class="latest-posts panel panel-default">
<div class="latest-posts__heading panel-heading">Latest blog posts</div>
<ul class="list-group">
<li class="post list-group-item">
2017-07-13 21:19:23 +00:00
<span class="post__title">
2017-07-21 17:44:18 +00:00
<a href="/blog/2017/07/13/publishing-sculpin-sites-with-github-pages/">
2017-07-13 21:19:23 +00:00
Publishing Sculpin Sites with GitHub Pages
</a>
</span> -
<span class="post__date">13th July, 2017</span>
</li>
<li class="post list-group-item">
2017-07-10 21:28:39 +00:00
<span class="post__title">
2017-07-21 17:44:18 +00:00
<a href="/blog/2017/06/09/introducing-the-drupal-meetups-twitterbot/">
2017-07-10 21:28:39 +00:00
Introducing the Drupal Meetups Twitterbot
</a>
</span> -
<span class="post__date">9th June, 2017</span>
</li>
<li class="post list-group-item">
<span class="post__title">
2017-07-21 17:44:18 +00:00
<a href="/blog/2017/05/20/turning-drupal-module-into-feature/">
2017-07-10 21:28:39 +00:00
Turning Your Custom Drupal Module into a Feature
</a>
</span> -
<span class="post__date">20th May, 2017</span>
</li>
</ul>
</div>
</div>
</div> </div>
<footer class="container">
<p class="copyright">
&copy; 2010-2017 Oliver Davies. Built with <a href="https://sculpin.io">Sculpin</a>.
</p>
<div class="meetups">
<h2>Things that I organise</h2>
<ul>
<li class="meetups--drupal-bristol">
<a href="http://www.drupalbristol.org.uk" title="Drupal Bristol">
2017-07-11 06:34:02 +00:00
<img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/drupal-bristol.jpeg"
2017-07-11 06:34:02 +00:00
alt="Drupal Bristol logo"
>
2017-07-10 21:28:39 +00:00
</a>
</li>
<li class="meetups--drupalcamp-bristol">
<a href="http://www.drupalcampbristol.co.uk" title="DrupalCamp Bristol">
2017-07-11 06:34:02 +00:00
<img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/drupalcamp-bristol.png"
2017-07-11 06:34:02 +00:00
alt="DrupalCamp Bristol logo"
>
2017-07-10 21:28:39 +00:00
</a>
</li>
<li class="meetups--phpsw">
<a href="http://phpsw.uk" title="PHPSW">
2017-07-11 06:34:02 +00:00
<img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/phpsw.jpeg"
2017-07-11 06:34:02 +00:00
alt="PHPSW logo"
>
2017-07-10 21:28:39 +00:00
</a>
</li>
</ul>
</div>
</footer>
2017-07-12 06:22:51 +00:00
<script src="https://www.oliverdavies.uk/assets/js/site.js"></script>
2017-07-10 21:28:39 +00:00
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11967257-1', 'auto'); ga('send', 'pageview');</script>
</body>
</html>