Question

When I call mysqldump from a controller or model I need to fully path the binary, when I call it from Rake I don't need to.

If I do not fully path I get a zero byte file...

I can confirm both processes are run using the same user.

# Works in a controller, model and Rake task
system "/usr/local/mysql/bin/mysqldump -u root #{w.database_name} > #{target_file}"

# Only works in a Rake task
system "mysqldump -u root #{w.database_name} > #{target_file}"

If I call the Rake task from the action it also fails (zero byte file).

OS: Mac Ruby 1.8.6

EDIT: I use Etc.getpwuid(Process.uid).name to get the User of the current process

Was it helpful?

Solution

You can always modify your PATH environment variable as required, of course. Something like this is best done in environment.rb or your specific environment config:

add_paths = %w[ /usr/local/mysql/bin /opt/local/bin ]
ENV['PATH'] = (ENV['PATH'].split(/:/) + add_paths).uniq.select do |p|
  File.exist?(File.expand_path(p))
end.join(':')

This way you can add arbitrary elements to your path if they exist on your system.

OTHER TIPS

I recently found out Passenger (mod_rails) does not run in a shell like Mongrel, which is obvious when you think about it. Therefore it does not 'inherit' the full system $PATH.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top