2009-11-26 19 views
0

Lorsque j'appelle le mysqldump à partir d'un contrôleur ou d'un modèle, j'ai besoin de parcourir complètement le binaire, quand je l'appelle de Rake, je n'ai pas besoin de le faire.Pourquoi mysqldump doit-il être complètement pathqué lorsqu'il est appelé depuis un contrôleur ou un modèle?

Si je ne suis pas complètement chemin que je reçois un fichier zéro octet ...

Je peux confirmer les deux processus sont exécutés en utilisant le même utilisateur. Si j'appelle la tâche Rake 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

+0

Comment lancez-vous votre application Rails? Je pense que vous devriez vérifier que le processus qui l'exécute a le même environnement (avec la variable PATH) que lorsque vous exécutez Rake. –

+0

Le processus est exécuté sous le même utilisateur, je ne suis pas si sûr de ce que le chemin est défini dans les deux cas. – Kris

+0

Dans Rails ENV ['PATH'] est/usr/bin:/bin:/usr/sbin:/sbin Dans Rake ENV ['PATH'], il est exactement le même que mon système $ PATH. Est-ce normal? – Kris

Répondre

1

Vous pouvez toujours modifier votre variable d'environnement PATH au besoin, bien sûr. Quelque chose comme cela est le mieux fait en environment.rb ou votre environnement config:

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 si elles existent sur votre système.

+0

Est-ce que cela suggère que le Ruby ENV ['PATH'] est indépendant du système $ PATH? – Kris

+0

Tous les shells que vous créez héritent de l'environnement du processus ruby, tout comme ruby ​​hérite du shell parent. Ce n'est pas indépendant, mais hérité du système PATH. – tadman

0

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