这里的目标是在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脚本,所以我有以下代码'exec'命令:
$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
请注意,我已尝试将代码添加到spec目录,而不是直接指定文件。它找到文件'rspec spec'的方式,但是观察到同样的问题。
├── config.yaml
├── dom_audit_parser.rb
├── dom_audit_portal.php
├── dom_audit_webdriver.rb
├── Rakefile
提前谢谢!
答案 0 :(得分:0)
vim / etc / sudoers 添加:
"www-data ALL=NOPASSWD: ALL"
来自PHP:
exec("sudo xyz");