Por que a necessidade mysqldump para ser totalmente pathed quando chamado a partir de um controlador ou modelo?

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

Pergunta

Quando eu chamo mysqldump de um controlador ou modelar Preciso caminho totalmente o binário, quando eu chamá-lo de Rake Eu não preciso.

Se não faço totalmente caminho eu recebo um arquivo de zero byte ...

Eu posso confirmar ambos os processos são executados utilizando o mesmo usuário.

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

Se eu chamar a tarefa Rake da ação também falhar (arquivo de byte zero).

OS: Mac Ruby 1.8.6

EDIT: Eu uso Etc.getpwuid(Process.uid).name para obter o usuário do processo atual

Foi útil?

Solução

Você sempre pode modificar sua variável de ambiente PATH, conforme necessário, é claro. Algo como isso é feito melhor em environment.rb ou seu ambiente específico 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(':')

Desta forma, você pode adicionar elementos arbitrários para o seu caminho, se eles existem em seu sistema.

Outras dicas

Recentemente eu descobri passageiros (mod_rails) não é executado em um shell como Mongrel, o que é óbvio quando você pensa sobre isso. Por isso ele faz não 'herdar' a plena sistema $ PATH.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top