컨트롤러 나 모델에서 호출 할 때 왜 mysqldump가 완전히 경로를 가져와야합니까?
-
05-07-2019 - |
문제
내가 전화 할 때 mysqldump
컨트롤러 나 모델에서 바이너리를 완전히 경로로 통과해야합니다.
내가 완전히 경로를하지 않으면 제로 바이트 파일을 얻습니다 ...
동일한 사용자를 사용하여 두 프로세스가 실행되는지 확인할 수 있습니다.
# 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}"
작업에서 레이크 작업을 호출하면 실패 (제로 바이트 파일)도 실패합니다.
OS : Mac Ruby 1.8.6
편집 : 사용합니다 Etc.getpwuid(Process.uid).name
현재 프로세스의 사용자를 얻습니다
해결책
물론 필요에 따라 항상 경로 환경 변수를 수정할 수 있습니다. 이와 같은 것은 환경에서 가장 잘 수행됩니다 .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(':')
이렇게하면 시스템에 존재하는 경우 임의의 요소를 경로에 추가 할 수 있습니다.
다른 팁
나는 최근에 승객 (mod_rails)이 Mongrel과 같은 껍질에서 실행되지 않는다는 것을 알았습니다. 이는 당신이 그것에 대해 생각할 때 분명합니다. 따라서 그렇습니다 ~ 아니다 전체 시스템 $ 경로를 '상속'하십시오.
제휴하지 않습니다 StackOverflow