Почему mysqldump должен быть полностью исправлен при вызове из контроллера или модели? - PullRequest
0 голосов
/ 26 ноября 2009

Когда я вызываю 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 Рубин 1.8.6

РЕДАКТИРОВАТЬ: я использую Etc.getpwuid(Process.uid).name, чтобы получить пользователя текущего процесса

Ответы [ 2 ]

1 голос
/ 26 ноября 2009

Конечно, вы всегда можете изменить переменную окружения 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(':')

Таким образом, вы можете добавить произвольные элементы к вашему пути, если они существуют в вашей системе.

0 голосов
/ 26 мая 2010

Я недавно обнаружил, что Passenger (mod_rails) не запускается в оболочке, подобной Mongrel, что очевидно, когда вы об этом думаете. Следовательно, не наследует всю систему $ PATH.

...