當我從控制器或模型調用mysqldump
時,我需要完全路徑二進制文件,當我從Rake調用它時,我不需要。爲什麼從控制器或模型調用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}"
如果我從動作調用Rake任務,它也會失敗(零字節文件)。
操作系統:Mac 的Ruby 1.8.6
編輯:我使用Etc.getpwuid(Process.uid).name
得到當前進程
你如何運行你的Rails應用程序?我認爲您應該檢查運行它的進程與運行Rake時有相同的環境(以及PATH變量)。 –
這個過程在同一個用戶下運行,我不太確定這兩種情況下PATH的設置。 – Kris
In Rails ENV ['PATH']是/ usr/bin:/ bin:/ usr/sbin:/ sbin 在Rake ENV ['PATH']中,它與我的系統$ PATH完全相同。 這是正常的嗎? – Kris