2016-05-25 16 views
2

私はUbuntu 14.04でMink (PHP)を試しています。nodejsがPHPミンクで 'ゾンビ'モジュールを見つけられない

$ apt-show-versions nodejs 
nodejs:amd64/trusty 0.10.45-1nodesource1~trusty1 uptodate 
$ npm -v 
2.15.1 
$ sudo npm install -g zombie 
npm WARN engine [email protected]: wanted: {"node":"^4.0.0"} (current: {"node":"0.10.45","npm":"2.15.1"}) 
... 
[email protected] /usr/lib/node_modules/zombie 
├── [email protected] 
├── [email protected] 
... 

$ ls /usr/lib/node_modules/zombie/node_modules/ 
babel-runtime bluebird debug eventsource iconv-lite jsdom lodash mime ms request tough-cookie ws 

だから、基本的に、私は警告を受ける場合でも、モジュールをビルドし、ディレクトリ/usr/lib/node_modulesにする必要があります:私は基本的に次のようでした。

それから私はやる:チェックとして

mkdir test_php_mink 
cd test_php_mink/ 
composer require behat/mink 
composer require behat/mink-zombie-driver 

を:

test_php_mink$ ls 
composer.json composer.lock vendor 

...すべてのcomposerファイルがあるようです。

は最後に、http://mink.behat.org/en/latest/drivers/zombie.htmlあたり(ともCannot find module 'zombie' · Issue #84 · assaf/zombie · GitHub)として、私はこのスクリプトをしようとしている:

<?php 

# composer autoload: 
require_once __DIR__ . '/vendor/autoload.php'; 

echo "safe_mode: '" . ini_get("safe_mode") ."'\n"; # have PHP 5.5.9, safe_mode is removed 

putenv("NODE_PATH=/usr/lib/node_modules"); 
echo "NODE_PATH is: '" . getenv ("NODE_PATH") . "'\n"; # OK, is there 

# NOPE: 
#$driver = new \Behat\Mink\Driver\ZombieDriver(); 

$driver = new \Behat\Mink\Driver\ZombieDriver(
    new \Behat\Mink\Driver\NodeJS\Server\ZombieServer() 
); 

$session = new \Behat\Mink\Session($driver); 

// start the session 
$session->start(); 
?> 

このスクリプトでは、残念ながら、まだで失敗します。

$ php test_php_mink.php 
safe_mode: '' 
NODE_PATH is: '/usr/lib/node_modules' 
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Server process has been terminated: (8) [ 
module.js:340 
    throw err; 
     ^
Error: Cannot find module 'zombie' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (/path/to/test_php_mink/vendor/behat/mink-zombie-driver/bin/mink-zombie-server.js:3:14) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
]' in /path/to/test_php_mink/vendor/behat/mink-zombie-driver/src/NodeJS/Server.php:413 
Stack trace: 
#0 /path/to/test_php_mink/vendor/behat/mink-zombie-driver/src/NodeJS/Server.php(306): Behat\Mink\Driv in /path/to/test_php_mink/vendor/behat/mink-zombie-driver/src/NodeJS/Server.php on line 413 

は、どのように私はこれを取得することができます実行するための基本的な例?


EDIT:これでより多くのビットを中心に演奏し、私はコマンドラインで環境変数を指定するときにことを発見:

$ NODE_PATH=/usr/lib/node_modules php test_php_mink.php 
safe_mode: '' 
NODE_PATH is: '/usr/lib/node_modules' 
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Server process has been terminated: (8) [ 
/usr/lib/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:238 
var nonInheritedTags = new Set([ 
         ^
ReferenceError: Set is not defined 
... 

...その後モジュールが見つかりているようです!だから私の質問は基本的に減少します:NODE_PATH私のPHPスクリプトから環境変数を変更することができますので、シェルで指定する必要はありません - 明らかにputenv("NODE_PATH=/usr/lib/node_modules");は本当に私にとっては役に立たないので...

新しいエラーのために、Installing Zombie.js Error: ReferenceError: Set is not defined. What am I doing wrong?があります - 明らかにこれは私が(npm WARN engine [email protected]: wanted: {"node":"^4.0.0"} (current: {"node":"0.10.45","npm":"2.15.1"}))のための警告を得たのでバージョンの不一致のためです、私はnvmをインストールしなければならないので、正しいnodejsバージョンをインストールできます。そして私はまた、/usr/lib/node_modules/zombie/README.mdに気づい:

ゾンビ4.xのio.js 1.6 or laterで動作するようにテストされています。
ノード0.12以前を使用する必要がある場合は、Zombie 2.xの使用を検討してください。 ...
はあなたが必要となりますZombie.jsをインストールするにはio.js
`` `bashの
$は
` ``

--save-devのゾンビをインストールNPM ...と私は考えていることnvmと一緒にインストールすることもできます。だから、私はそれを試してみましょう...

答えて

0

[OK]を、一見すると動作する方法のいくつかの並べ替えを見つけました - しかし、私はまだ誰かが答えに精通しています。

とにかく、 - zombieは、nodejsバイナリへのパスを受け入れることができます。 PHPからnodejsの環境変数を実際に渡すことができない場合は、これらの環境変数を設定するシェルスクリプトを作成し、nodejsを呼び出します。

まずこのだった私のインストール:

# remove previous 
sudo npm uninstall -g zombie --save-dev 
sudo apt-get remove --purge nodejs && sudo apt-get autoremove --purge 

# install new 
curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash 
nvm install iojs-v3.3.1 
npm list -g --depth=0 
nvm install 4.0.0 
npm list -g --depth=0 
npm -g install zombie --save-dev 

nvmでの問題は、それがユーザーディレクトリにインストールすることにある、と私は私のユーザーのマシンとリモートサーバー上の私のスクリプトの両方をテストしたいのですが、私のuidsは完全に異なっています。それにもかかわらず、カスタム実行可能ファイルを使用すると、それに少し役立ちます。だから、私は/homeを選んだ、「グローバル」な場所にスクリプトを作成するので、私はそこにファイルを作成するsudoが必要になります:

sudo touch /home/node_pth.sh 

...その後、次の内容を貼り付けます。

#!/bin/bash 
export NODE_PATH=/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules 
#echo ARGS ARE "[email protected]" | tee -a /tmp/node.log 
/home/USERNAME/.nvm/versions/node/v4.0.0/bin/node "[email protected]" 

...もちろん、パスを正しいものに置き換えてください。今、私たちは、次のtest_php_mink.php PHPファイルを使用することができます

sudo chmod +x /home/node_pth.sh 

:最後にそれを実行可能にする

<?php 

$nodeModPath = "/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules"; # correct NODE_PATH, but will not help 
$nodePath = "/home/node_pth.sh"; # shell script that sets NODE_PATH, then calls node executable 

echo "NODE_PATH is: '" . getenv ("NODE_PATH") . "'\n"; # 
putenv("NODE_PATH=".$nodeModPath); 
echo "NODE_PATH is: '" . getenv ("NODE_PATH") . "'\n"; # is there - but still doesn't help with call 

# composer autoload: 
require_once __DIR__ . '/vendor/autoload.php'; 

echo "safe_mode: '" . ini_get("safe_mode") ."'\n"; # have PHP 5.5.9, safe_mode is removed 


$driver = new \Behat\Mink\Driver\ZombieDriver(
    //~ new \Behat\Mink\Driver\NodeJS\Server\ZombieServer() 
    # copy defaults here for everything but nodeBin; 
    # see vendor/behat/mink-zombie-driver/src/NodeJS/Server.php 
    new \Behat\Mink\Driver\NodeJS\Server\ZombieServer("127.0.0.1", 8124, $nodePath, null) 
); 

$session = new \Behat\Mink\Session($driver); 

// start the session 
$session->start(); 
?> 

を...または、私はちょうどvendor/behat/mink-zombie-driver/src/NodeJS/Server.phpsetNodeModulesPath($nodeModulesPath)があり実現し、私たちがすることができますプロキシbashの実行可能ファイルをすべて削除してください:

<?php 

$nodeModPath = "/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules"; # correct NODE_PATH, but will not help via putenv 

echo "NODE_PATH is: '" . getenv ("NODE_PATH") . "'\n"; # 
putenv("NODE_PATH=".$nodeModPath); 
echo "NODE_PATH is: '" . getenv ("NODE_PATH") . "'\n"; # is there - but still doesn't help with call 

# composer autoload: 
require_once __DIR__ . '/vendor/autoload.php'; 

echo "safe_mode: '" . ini_get("safe_mode") ."'\n"; # have PHP 5.5.9, safe_mode is removed 

$zsrv = new \Behat\Mink\Driver\NodeJS\Server\ZombieServer(); 
$zsrv->setNodeModulesPath($nodeModPath . "/"); # needs to end with a trailing '/' 

$driver = new \Behat\Mink\Driver\ZombieDriver($zsrv); 

$session = new \Behat\Mink\Session($driver); 

// start the session 
$session->start(); 

?> 

とにかく、いつこのスクリプトが呼び出され、それが出力:

$ php test_php_mink.php 
NODE_PATH is: '' 
NODE_PATH is: '/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules' 
safe_mode: '' 

を...とエラーがないよう、私は

...それは今、すべての罰金ですと仮定しています
関連する問題