コントローラーまたはモデルから呼び出すmysqldump
場合は、バイナリを完全にパスする必要がありますが、Rakeから呼び出す場合は、その必要はありません。
完全にパスしないと、ゼロバイトのファイルが表示されます...
両方のプロセスが同じユーザーを使用して実行されていることを確認できます。
# 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}"
アクションからRakeタスクを呼び出すと、それも失敗します(ゼロバイトファイル)。
OS:Mac Ruby 1.8.6
編集:私Etc.getpwuid(Process.uid).name
は現在のプロセスのユーザーを取得するために使用します