【发布时间】:2012-08-14 08:06:53
【问题描述】:
如何在我们的 rails 控制器中执行 rails 命令行语句
eg: 我需要执行这个语句
$rails new test -d postgresql
来自我的 Rails 控制器
定义索引
/执行命令行语句的代码/
结束
希望很清楚..
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3.2
如何在我们的 rails 控制器中执行 rails 命令行语句
eg: 我需要执行这个语句
$rails new test -d postgresql
来自我的 Rails 控制器
定义索引
/执行命令行语句的代码/
结束
希望很清楚..
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3.2
如果你想在控制器中运行 shell 命令,只需使用“系统”
例如:
system "rails new test -d postgresql"
否则
exec "rails new test -d postgresql"
【讨论】:
使用反引号来表示,如下所示:
`rails new test -d postgresql`
为此使用作业队列可能更聪明。
【讨论】:
要在控制器内部运行命令行语句,我们可以使用system 命令
system "cd {path_to_folder}; rails new test -d postgresql"
【讨论】:
就像PradeepKumar 说的(会对此发表评论,但由于代表不能发表评论):
system "cd {path_to_folder}; rails new test -d postgresql"
您必须在同一条指令中声明要运行的所有命令(以; 分隔)。我没有这样做(将cd 命令与我的runnable 和两个不同调用中的实际执行行分开来访问目录),我得到的结果不是我们想要的。
例如,如果您尝试运行:
system "cd {path_to_folder}"
然后:
system "rails new test -d postgresql"
rails 命令不会在 path_to_folder 的上下文中执行,而是在命令行界面的默认位置(例如 C:\Users\Me)或 Rails 程序的环境中执行。
此外,我在命令执行时遇到错误,我通过在命令末尾添加 & 来修复它。在这种情况下,指令有两个命令,我将它添加到第一个命令的末尾(; 之前)。
【讨论】: