0

コントローラーまたはモデルから呼び出す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は現在のプロセスのユーザーを取得するために使用します

4

2 に答える 2

1

もちろん、必要に応じて PATH 環境変数をいつでも変更できます。このようなことは、environment.rb または特定の環境設定で行うのが最適です。

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

このようにして、システムに存在する場合、パスに任意の要素を追加できます。

于 2009-11-26T19:56:38.663 に答える
0

私は最近、Passenger (mod_rails) が Mongrel のようなシェルで実行されないことを知りました。したがって、完全なシステム $PATH を「継承」しません。

于 2010-05-26T11:24:15.673 に答える