Warum mysqldump müssen vollständig pathed werden, wenn von einem Controller oder Modell genannt?
-
05-07-2019 - |
Frage
Wenn ich mysqldump
von einem Controller oder das Modell nennen muß ich die binären vollständig Weg, wenn ich es von Rake rufe ich nicht brauchen.
Wenn ich nicht voll Weg erhalte ich eine Null-Byte-Datei ...
Ich kann bestätigen, beiden Prozesse ausgeführt werden, den gleichen Benutzer verwendet wird.
# 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}"
Wenn ich die Rake Aufgabe von der Aktion nenne es nicht auch (Null-Byte-Datei).
Betriebssystem: Mac Ruby 1.8.6
EDIT: Ich benutze Etc.getpwuid(Process.uid).name
den Benutzer des aktuellen Prozesses zu bekommen
Lösung
Sie können jederzeit Ihre Umgebungsvariable PATH ändern je nach Bedarf, natürlich. So etwas wie dies am besten in environment.rb oder Ihre spezifische Umgebung Config getan:
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(':')
Auf diese Weise können Sie beliebige Elemente auf Ihrem Weg hinzufügen, wenn sie auf dem System vorhanden sind.
Andere Tipps
Vor kurzem fand ich heraus Passagier (mod_rails) hat in einer Schale wie Mongrel nicht ausgeführt, was offensichtlich ist, wenn man darüber nachdenkt. Deshalb tut es nicht 'erben' das volle System $ PATH.