ここでの目標は、PHP の「exec」コマンド内で (rake.invoke を使用して) ruby スクリプトを実行することです。
私は正常に実行される動作する rspec 構成を持っています (ここにヘッドレス rake タスクがありますが、以下の例ではヘッドレスと「ヘッド」の両方で動作することに注意してください)
FILE=./../tools/wr_audit_dom.rb WR_DEBUG=1 bundle exec rake local:headless
次のように、この rake ターゲットと他のロジックを ruby ファイルで呼び出します。
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
ファイルを直接指定するのではなく、spec ディレクトリにコードを追加しようとしたことに注意してください。「rspec spec」の方法でファイルを見つけますが、同じ問題が観察されます。
├── config.yaml
├── dom_audit_parser.rb
├── dom_audit_portal.php
├── dom_audit_webdriver.rb
├── Rakefile
前もって感謝します!