2014-10-16 30 views
0

我在应用程序minizinc中的文件~/.bashrc,我可以在bash上调用它。我正在构建一个Rails应用程序,它从bash调用minizinc,但我无法完成。执行此操作后:编辑Rails应用程序的bash PATH变量

@cmd = ` bash -c "minizinC#{path} -n 1" ` 

我得到以下错误:

bash: minizinc: command not found 

我如何能在Rails应用程序用户的PATH变量更改从应用程序?或者我该如何告诉Rails应用程序这个bash应用程序的位置?

+0

你是否从命令行运行rails应用程序?或从一些IDE工具? – 2014-10-16 11:25:45

+0

'.bashrc'只能用于交互式shell。你可以尝试'bash -ic'mini zinc#{path} -n 1“',但可能有更好的解决方案。 “我在〜/ .bashrc文件中有应用程序minizinc”是什么意思? – chepner 2014-10-16 12:50:48

回答

1

您在这里有几个选项。一个我认为最适合你的情况,并会直接使用命令,而不是调用猛砸做同样的红宝石建议:

@cmd = `minizinC#{path} -n 1` 

如果使用这样的命令是一个shell执行一个类似于Ruby运行的环境。这意味着PATH变量将是相同的。因此,如果启动Rails服务器时包含可执行文件minizinc的目录位于PATH中,则它应该位于运行该命令的shell的PATH变量中。

现在,如果你确实需要在中间使用Bash,我觉得PATH变量与Ruby不一样(我尝试使用IRB并且按照预期工作)。您可以通过使用

bash -c "echo $PATH" 

更换您的命令检查它在Rails的控制台中运行时,它应该打印相同的值

puts ENV['PATH'] 

如果在检查之后,您会看到您的Rails环境的PATH变量是不正确,你可以专门设置它为Rails服务器:

PATH="<path_to_minizinc_dir>:$PATH" rails server 

此设置PATH环境变量的值只对于您即将执行的命令,在这种情况下为rails server

或者,您也可以通过简单地利用可执行的绝对路径超越这一切:

@cmd = `bash -c "/full/path/to/minizinC#{path} -n 1"` 

如果你提供的完整路径,要执行的命令,PATH环境变量根本不会发挥作用,但我想这对你的情况来说是不理想的。