2012-08-14 47 views
2

如何执行铁轨我们的Rails控制器中的命令行声明命令行语句中轨控制器

例如:我需要从我的轨控制器

def index

/Code to execute the command line statement/

end

希望时执行该语句

$rails new test -d postgresql

清除..

回答

10

如果你想运行的内部控制shell命令,只需使用 “系统”

如:

system "rails new test -d postgresql" 

或其他

exec "rails new test -d postgresql" 
+0

basic ..应该试过! :-) 谢谢 .. ! – Yothesh 2012-08-14 10:09:22

+0

嗨,我无法在现有应用程序的控制器内创建一个新的rails应用程序。我得到以下错误:无法在另一个目录内初始化新的Rails应用程序,请先更改为非Rails目录。键入'rails'寻求帮助。 – Yothesh 2012-08-31 06:40:31

2

使用反引号外壳,像这样:
`rails new test -d postgresql`

为此使用作业队列可能会更聪明。

3

内运行控制器的命令行语句,我们可以使用system命令

system "cd {path_to_folder}; rails new test -d postgresql" 
2

PradeepKumar说(会对此发表评论,但不能因REP):

system "cd {path_to_folder}; rails new test -d postgresql"

你必须声明所有你想在同一指令(用;分隔)运行命令。我没有这样做(分开cd命令,用两个不同的调用来访问我的可运行目录和实际执行行),我得到的结果不是我想要的。 例如,如果您尝试运行:

system "cd {path_to_folder}" 

然后:

system "rails new test -d postgresql" 

rails命令不会在path_to_folder的背景下,但在命令行中的默认位置被执行界面(例如C:\Users\Me)或您的Rails程序的环境。

另外我在执行命令时遇到了错误,我在命令末尾添加了一个&。在这种情况下,指令有两个命令,我将它添加到第一个命令的末尾(在;之前)。