Warum mysqldump müssen vollständig pathed werden, wenn von einem Controller oder Modell genannt?

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

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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top