【问题标题】:Get spiderable: phantomjs failed because of permission denied获取可爬取:phantomjs 由于权限被拒绝而失败
【发布时间】:2013-03-12 18:44:05
【问题描述】:

我捆绑了我的应用程序并将其放到我的服务器上。我正在通过 upstart 运行应用程序:

exec sudo -u myuser PORT=3005 MONGO_URL=mongodb://localhost:27017/ms ROOT_URL=http://www.example.com/ /usr/bin/node /var/www/priv/example.com/bundle/main.js >> $

重要的部分(我认为)是:

exec sudo -u myuser

当我通过以下方式卷曲我的应用程序时:

curl http://www.example.com/?_escaped_fragment_=

我得到一个空的身体。我的日志文件说:

spiderable: phantomjs failed: { [Error: Command failed: /bin/bash: /root/.bashrc: Permission denied
Can't open '/dev/stdin'
] killed: false, code: 255, signal: null }
stderr: /bin/bash: /root/.bashrc: Permission denied
Can't open '/dev/stdin'

我在 /root/.bashrc 上执行了 chmod 777 但没有任何成功。如果我将/bin/bash /root/.bashrc 设置为“myuser”,我也会被拒绝。

谁能告诉我如何设置权限,以便 phantomjs 可以做它必须做的事情?我可以指定 ~/.bashrc 在任何地方使用吗?我真的很想在谷歌上看到我的东西:-)

非常感谢! 曼努埃尔

更新:

我通过 npm 安装了 phantom.js 1.8.2。 以 root 身份运行应用程序没有帮助。那么错误是:

spiderable: phantomjs failed: { [Error: Command failed: Can't open '/dev/stdin' ] killed: false, code: 255, signal: null } stderr: Can't open '/dev/stdin'

我发现,它似乎是导致问题的包。我在这里打开了一个问题: github.com/alanning/meteor-roles/issues/3

【问题讨论】:

  • 更新:尝试以 root 身份启动应用程序。日志说:spiderable: phantomjs failed: { [Error: Command failed: Can't open '/dev/stdin' ] 杀死:false,代码:255,信号:null } stderr: Can't open '/dev/stdin'
  • 不确定这是否是问题所在,但您应该确保服务器上的 phantomjs 版本是最新版本。 1.4 及以下版本需要 X 窗口服务器,而 Ubuntu 的 apt 存储库仍然有 1.4。这是 phantomjs 常见问题解答,对此进行了一些解释:phantomjs.org/faq.html。
  • 哦,还要确保你已经安装了phantomjs! Meteor 的可爬取软件包不会为您安装它。我为此困惑了好一阵子。
  • 嘿 zorlak,我安装了 phantom.js 版本 1.8.2。我发现问题似乎出在我使用的包中。流星角色。我在这里打开了一个问题:github.com/alanning/meteor-roles/issues/3

标签: meteor


【解决方案1】:

Alanning 解决了这个问题,但可爬取仍然无法正常工作。解决方案是删除 phantomjs,因为我是通过 npm 安装的。然后我直接从http://phantomjs.org/download.html 重新安装了它。现在它正在工作!

【讨论】:

  • 在最新版本 (1.9.1) 上,这种情况仍在发生。
  • 最新版本 (1.9.2) 仍在进行中。
  • 快速跟进。我不想放弃在服务器上打包,所以将 PhantomJS 的二进制版本解压缩到项目目录中,然后修改项目的 PATH 环境变量,以便可爬虫首先“看到”这个版本。
  • 曾经了解如何通过 npm 使用它吗?我很想通过 npm 来实现,所以我们不必担心使用不同的程序在不同的操作系统(linux、mac 等)上获取它
  • 更新进度——如果你用 sudo 运行 phantomjs 命令,它的操作似乎是一样的。我不知道为什么——希望这对某人有帮助(如果你发现原因,请更新这个!)
【解决方案2】:

我又发现了这个问题,问题是服务器端的发布,在某些情况下只是返回但没有停止订阅。

例如在服务器上我有一个出版物

return unless @userId

正确的方法是:

return this.stop() unless @userId

如果爬虫来了,它永远不会被认证,所以要小心正确地结束发布。

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2020-01-04
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多