2014-10-16 57 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環境變量根本不會發揮作用,但我想這對你的情況來說是不理想的。