所以,我今天将代码从 windows 转换到 linux 以确保一切正常。我设法打破了 casper/phantom,我什至不知道如何。
这是我在 linux (ubuntu 12.14) 上运行 casper 脚本的命令:
/usr/bin/casperjs /var/www/tekalyze/phantom/get_site_info.js --jquery-path="/var/www/tekalyze/js/jquery-1.10.2.min.js" --uri-path=" /var/www/tekalyze/phantom/URI.js" --log-path="/var/www/tekalyze/phantom/casper.log" --data-url=http://tekalyze.com/ajax.php --id='19' --url='http://www.bk.com/?utm_source=LOCATIONiq&utm_medium=locallstgs&utm_campaign=2013' --log-level=debug
它给了我这个:
TypeError: 'undefined' is not an object (evaluating 'requireDirs.forEach')
in module (./get_all_urls:102)
/var/www/tekalyze/phantom/get_all_urls.js:102 in _require
/var/www/tekalyze/phantom:13 in anonymous
/home/casper/casperjs/bin/bootstrap.js:146 in _require
/var/www/tekalyze/phantom/get_site_info.js:8
/var/www/tekalyze/phantom/get_site_info.js:228
get_all_urls 的第 102 行是:
crawl.call(this, links[currentLink]);
我试过评论它,堆栈跟踪保持不变,这让我相信它不相关。
相关文件可以在这里找到。
老实说,我只是在挠头。我查看了 bootstrap.js:146 并看到了一些关于 phantom.casperPath 的内容,但我不必在 windows 中设置环境变量,所以我不确定这是否适用于 linux。相关的行是这样的:if (!phantom.casperPath)
- 这让我相信如果我重新编写所有内容以首先从幻像开始,然后设置所有 casper 变量,我可以让它工作,但我还没有验证这是否会工作呢。
另外,我使用这个脚本来安装它们,所以应该正确设置目录。