0

当我mysqldump从控制器或模型调用时,我需要完全路径二进制文件,当我从 Rake 调用它时,我不需要。

如果我没有完全路径,我会得到一个零字节文件......

我可以确认两个进程都是使用同一个用户运行的。

# 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}"

如果我从操作中调用 Rake 任务,它也会失败(零字节文件)。

操作系统:Mac Ruby 1.8.6

编辑:我Etc.getpwuid(Process.uid).name用来获取当前进程的用户

4

2 回答 2

1

当然,您始终可以根据需要修改 PATH 环境变量。这样的事情最好在 environment.rb 或您的特定环境配置中完成:

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(':')

这样,您可以将任意元素添加到您的路径中(如果它们存在于您的系统中)。

于 2009-11-26T19:56:38.663 回答
0

我最近发现,Passenger (mod_rails) 不像 Mongrel 那样在 shell 中运行,仔细想想就很明显了。因此它不会继承”整个系统 $PATH。

于 2010-05-26T11:24:15.673 回答