title: Capistrano: Can I set an environment variable for the whole cap session?
body: <p>I've got a staging server with both standard Ruby and Ruby Enterprise installed.  As standard Ruby refuses to install a critical gem, I need to set $PATH so that ruby/gem/rake/etc. always refer to the REE versions.  And since I use Capistrano to deploy to our machines, I need to do it in Capistrano.</p>
  
  <p><strong>How can I set an environment variable once, and have it persist throughout the Capistrano session?</strong></p>
  
  <p>1) It's easy to do in bashrc files, but Capistrano doesn't read bashrc files.</p>
  
  <p>2) I'd use Capistrano's</p>
  
  <pre><code>default_environment['PATH'] = 'Whatever'
  </code></pre>
  
  <p>but Capistrano uses these environment variables like</p>
  
  <pre><code>env PATH=Whatever command arg ...
  </code></pre>
  
  <p>and they're lost whenever another shell is spun up within the executable passed to env.  Like when you use sudo.  Which is kinda important:</p>
  
  <pre><code>[holt@Michaela trunk]$ env VAR=hello ruby -e "puts ENV['VAR']"
  hello
  [holt@Michaela trunk]$ env VAR=hello sudo ruby -e "puts ENV['VAR']"
  nil
  </code></pre>
  
  <p>3) And I can't use the bash export command, as these are lost too - Capistrano seems to start up a new shell for each command (or something like that), and that's lost, too:</p>
  
  <pre><code>cap&gt; export MYVAR=12
  [establishing connection(s) to xxx.xxx.xxx.xxx]
  cap&gt; echo $MYVAR
   ** [out :: xxx.xxx.xxx.xxx] 
  cap&gt; 
  </code></pre>
  
  <p>4) I've tried messing with Capistrano's :shell and :pty options as well (and in combination with the other approaches), but no luck there, either.</p>
  
  <p><strong>So - what's the right way to do this?</strong>  This seems like such a basic task that there should be a really simple way to accomplish it, but I'm out of ideas.  Anyone?</p>
  
  <p>Thanks in advance!</p>