컨트롤러 나 모델에서 호출 할 때 왜 mysqldump가 완전히 경로를 가져와야합니까?

StackOverflow https://stackoverflow.com/questions/1803728

문제

내가 전화 할 때 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과 같은 껍질에서 실행되지 않는다는 것을 알았습니다. 이는 당신이 그것에 대해 생각할 때 분명합니다. 따라서 그렇습니다 ~ 아니다 전체 시스템 $ 경로를 '상속'하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top