为什么红宝石给了我一个不同的答案,其中'命令

时间:2015-08-13 09:30:53

标签: ruby ruby-on-rails-4

我需要指向一个可执行路径,我尝试在IRB中使用它:

%x( which wkhtmltopdf )
#"/home/james/.rbenv/versions/2.2.2/bin/wkhtmltopdf\n"

但是当我在命令行输入命令时,我得到:

 % which wkhtmltopdf  
 #/usr/local/bin/wkhtmltopdf

我想这是两个问题:

1)为什么ruby给出了不同的答案?

2)有没有办法在ruby中获得命令行答案?

2 个答案:

答案 0 :(得分:2)

在ruby环境中,您正在Bundler的上下文中执行,它有效地覆盖路径作为从rbenv继承的登录变量。

看起来您之前已经运行过gem install wkhtmltopdf-binary。这将覆盖您在路径上使用的所有系统安装。

查看Login Shell Blogpost了解详情。

如果您启动了一个新shell,它可能不会继承rbenv环境:

%x(bash -l which wkhtmltopdf)

或者,您可以获取路径上的所有实例,然后过滤掉结果,使其不包含rbenv。 (确切的代码未经测试)

all_binaries = %x(which -a wkhtmltopdf).split

original_binary = ""

all_binaries.each do |bin|
  if not s.contains? "rbenv"
    original_binary = bin

    # Will break on the first instance which isn't within the rbenv.
    break 
  end
end

答案 1 :(得分:0)

我成功解决了2)

`which wkhtmltopdf`
#"/usr/local/bin/wkhtmltopdf\n"