Hi all,

I have a bunch of staging servers, all of which have their own, custom
compiled ruby and gem versions. In order to work with a given server
instance, a user is supposed to eval a script that sets up their bash
environment. Like this:

$ cd /var/www/staging-x
$ eval `bin/env.sh`
$ which ruby
/var/www/staging-x/usr/bin/ruby
$ which gem
/var/www/staging-x/usr/bin/gem

When I use Cap to run "eval `bin/env.sh`", the variables it exports
are not persisted:

namespace :env do
  task :init do
    run "cd #{deploy_to}"
    run "eval `#{deploy_to}/bin/env.sh`"
  end

  task :sandbox do
    set :rails_env, :sandbox
    set :deploy_to, "/var/www/#{application}-sandbox"
    init
  end

  task :echo do
    run 'echo $RAILS_ENV'
    run 'which ruby'
    run 'which gem'
  end
end

$ cap env:sandbox env:echo
<snip>
  * executing `env:echo'
  * executing "echo $RAILS_ENV"
    servers: ["example.com"]
    [example.com] executing command
 ** [out :: example.com]
    command finished
  * executing "which ruby"
    servers: ["example.com"]
    [example.com] executing command
 ** [out :: example.com] /usr/bin/ruby
    command finished
  * executing "which gem"
    servers: ["example.com"]
    [example.com] executing command
*** [err :: example.com] which: no gem in (/usr/kerberos/bin:/usr/
local/bin:/bin:/usr/bin)
    command finished
command "which gem" failed on example.com

As you can see, the PATH variable still points to the system version
of ruby, and since the system doesn't have gem installed, "which gem"
kills the script outright.

I've been looking around and I see lots of problems surrounding
people's bashrc files being read and other ssh configuration issues,
but this really seems to be something to do with how Capistrano is
executing each command and the persistence of the environment between
them. A colleague suggested I do something like

  run "eval `bin/env.sh` && foobar"

which I guess is a possibility, but hardly an elegant solution, since
I'd have to prefix each command with the eval statement (probably best
accomplished by extending "run").

Thanks in advance for any help you might be able to offer.

-Ian
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---

Reply via email to