Setting the Apache 2.4 PATH environment variable in a brew services started httpd process

Written by James McDonald

December 15, 2016

Note the following perl script

#!/usr/bin/env perl -wT
print "Content-type: text/html\n\n";
#
foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p>";
}

As you can see the hash bang is #!/usr/bin/env perl  this is supposed to be more portable because it will find the first instance of perl in your path so if you put /usr/local/bin first in the PATH you get your Homebrew installed Perl

The problem is the above script wouldn’t find the Homebrew Perl because my Homebrew Apache 2.4 PATH was PATH = /usr/bin:/bin:/usr/sbin:/sbin

This wouldn’t be a problem except I had installed JSON, Config::Simple and other Perl modules in the Homebrew Perl under /usr/local and when I ran the CGI script that used these against the above default PATH they were erroing out with and @INC error because of not finding the Perl modules under the system Perl in /usr/bin/perl

It took me a while of Googling to find out how to configure the plist file to pass a new environment in but here it is. I hope it saves someone 2 hours.

So firstly shut your httpd24 down

brew services stop httpd24

edit your homebrew.mxcl.httpd24.plist file  and add the EnvironmentVariables key and the following <dict> to it

vim /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist

restart your httpd

brew services stop httpd24

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>homebrew.mxcl.httpd24</string>
  <!-- add this -->
  <key>EnvironmentVariables</key>
  <dict>
   <key>PATH</key>
   <string>/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin</string>
  </dict>
  <!-- end add -->
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/httpd24/bin/httpd</string>
    <string>-D</string>
    <string>FOREGROUND</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

b

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

You May Also Like…

Clear HSTS Settings in CHrome

Open chrome://net-internals/#hsts enter the domain in the query field and click Query to confirm it has HSTS settings...

Ubuntu on Hyper-v

It boils town to installing linux-azure # as root or sudo apt-get update apt-get install linux-azure...