0

这里的目标是在 PHP 'exec' 命令中执行一个 ruby​​ 脚本(使用 rake.invoke)。

我有一个有效的 rspec 配置,可以干净地执行(例如,这里是无头 rake 任务,但请注意,对于下面的示例,它既可以无头也可以“带头”)

FILE=./../tools/wr_audit_dom.rb WR_DEBUG=1 bundle exec rake local:headless

我在 ruby​​ 文件中调用这个 rake 目标和其他逻辑,如下所示:

Rake.application.init
Rake.application.load_rakefile
Rake.application['local:headless'].reenable
Rake.application['local:headless'].invoke
> ruby dom_audit_parser.rb
(this runs as expected)

上面的一切都执行得很好,我的测试运行了,我得到了我的结果。

但是,我想通过 PHP 执行 ruby​​ 脚本,所以我有以下代码来“执行”命令:

$cmd = 'cd <_projectdirectory_snipped_>; ruby dom_audit_parser.rb';
exec($cmd, $results);

问题:它没有返回任何运行的示例,就好像它找不到它们一样。

但是,我可以直接在终端中运行相同的命令(从 php 中的 exec cmd 复制),并运行所有示例。谁能告诉我可能出了什么问题?

下面的命令显示正在指定和找到文件,没有跳过任何示例,但没有找到任何内容。

PHP 'exec' 命令的输出

/usr/bin/ruby1.9.1 -S rspec dom_audit_webdriver_spec.rb -f documentation --color Run
options: include {:local=>true} Finished in 0.00017 seconds 0 examples, 0 failures

直接在终端中运行 ruby​​ 命令的输出

/usr/bin/ruby1.9.1 -S rspec dom_audit_webdriver_spec.rb -f documentation --color
Run options: include {:local=>true}    
Inspect the webpage to scrape the DOM object
-- [LOCAL] Starting firefox :
[2013-10-09 16:19:10 -0400] Logging in
[2013-10-09 16:19:10 -0400] Opening webpage
..... SNIP
-- [LOCAL] quit firefox
  should find the dom object for the html node    
Finished in 2 minutes 0.2 seconds
1 example, 0 failures

请注意,我尝试将代码添加到规范目录而不是直接指定文件。它以“rspec spec”的方式找到文件,但观察到同样的问题。

├── config.yaml
├── dom_audit_parser.rb
├── dom_audit_portal.php
├── dom_audit_webdriver.rb
├── Rakefile

先感谢您!

4

1 回答 1

0

vim /etc/sudoers 添加:

"www-data        ALL=NOPASSWD: ALL"

来自 PHP:

exec("sudo xyz");
于 2013-10-10T16:59:19.510 回答