您在这里有几个选项。一个我认为最适合你的情况,并会直接使用命令,而不是调用猛砸做同样的红宝石建议:
@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环境变量根本不会发挥作用,但我想这对你的情况来说是不理想的。
你是否从命令行运行rails应用程序?或从一些IDE工具? – 2014-10-16 11:25:45
'.bashrc'只能用于交互式shell。你可以尝试'bash -ic'mini zinc#{path} -n 1“',但可能有更好的解决方案。 “我在〜/ .bashrc文件中有应用程序minizinc”是什么意思? – chepner 2014-10-16 12:50:48