代码之家  ›  专栏  ›  技术社区  ›  Kris

为什么从控制器或模型调用mysqldump时需要完全路径?

  •  0
  • Kris  · 技术社区  · 16 年前

    当我呼唤 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任务,它也会失败(零字节文件)。

    操作系统:MAC 红宝石1.8

    编辑:我使用 Etc.getpwuid(Process.uid).name 获取当前进程的用户

    2 回复  |  直到 13 年前
        1
  •  1
  •   tadman    16 年前

    当然,您可以根据需要修改路径环境变量。类似这样的操作最好在environment.rb或特定的environment 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(':')
    

    这样,您就可以向您的路径中添加任意元素(如果它们存在于您的系统中)。

        2
  •  0
  •   Kris    13 年前

    我最近发现乘客(mod ou rails)不会在像混血儿一样的壳中奔跑,这在你考虑它时是显而易见的。因此它确实 “inherit”完整的系统$path。