Pourquoi mysqldump doit-il être entièrement redirigé lorsqu'il est appelé depuis un contrôleur ou un modèle?

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

Question

Lorsque j'appelle mysqldump depuis un contrôleur ou un modèle dont j'ai besoin pour acheminer complètement le binaire, lorsque je l'appelle depuis Rake, je n'ai pas besoin de le faire.

Si je ne suis pas complètement sur le chemin, j'obtiens un fichier de zéro octet ...

Je peux confirmer que les deux processus sont exécutés avec le même utilisateur.

# 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}"

Si j'appelle la tâche Rake à partir de l'action, elle échoue également (fichier de zéro octet).

OS: Mac Ruby 1.8.6

EDIT: j'utilise Etc.getpwuid (Process.uid) .name pour obtenir l'utilisateur du processus en cours

Était-ce utile?

La solution

Vous pouvez toujours modifier votre variable d’environnement PATH selon vos besoins, bien sûr. Il est préférable de procéder de la sorte dans environment.rb ou dans votre configuration d’environnement spécifique:

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(':')

De cette façon, vous pouvez ajouter des éléments arbitraires à votre chemin s'ils existent sur votre système.

Autres conseils

J'ai récemment découvert que Passenger (mod_rails) ne s'exécutait pas dans un shell comme Mongrel, ce qui est évident quand on y pense. Par conséquent, il n'hérite pas du système complet $ PATH.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top