【问题标题】:antiword doesn't work on hosted serverantiword 在托管服务器上不起作用
【发布时间】:2012-06-24 23:50:10
【问题描述】:

我想这可能是一个愚蠢的问题,但我花了好几个小时。

在一台redhat Linux服务器上,我写了一个网页,试图将同一台服务器上的软件称为“antiword”。

antiword位于/home/myusername/bin,需要目录/home/myusername/.antiword运行。

当我在浏览器中运行我的网页时,它搜索的是 /.antiword 而不是 /home/myusername/.antiword

所以它说找不到目录。

我该如何解决这个问题?

澄清一点

antiword 是程序名。无论你在哪里调用它,它都会在同一位置“/home/myusername/.antiword”搜索目录“.antiword”

顺便说一句,我没有 root 帐户,所以“ln”不起作用。

【问题讨论】:

  • 你怎么知道“它搜索了 /.antiword”?你使用任何环境变量吗?分享一些代码。
  • Antiword 在三个目录中查找其映射文件,顺序为: (1) $ANTIWORDHOME 指定的目录 (2) $HOME/.antiword 指定的目录 (3) 目录/usr /share/antiword 我可以设置 $ANTIWORDHOME,但是当我通过浏览器访问它时。环境变量会起作用吗?
  • 显然 HOME 不是您所期望的,除非您以 .../~myusername/ 访问网页。即使在那种情况下,我也不相信 apache 会设置 HOME(我可能错了)。你怎么称呼反字?

标签: linux directory redhat


【解决方案1】:

我遇到了完全相同的问题。希望这对其他人有用,因为antiword 是非常有用的软件。

antiword 出于某种原因不喜欢托管 Web 服务器(此处概述:http://foswiki.org/Support/Question638)。我在将在本地 QA 机器上运行良好的 node 服务器部署到云中的生产服务器时遇到了这个问题。因此,我的解决方案涉及node。

这在生产中不起作用:

var exec = require('child_process').exec;

exec('antiword /some/word.doc', function(err, stdout, stderr) {
    console.log(stderr);
  });

你应该看到

I can't find the name of your HOME directory

或类似的东西。 link 提供了一些解释原因。为了解决这个问题,我设置了$ANTIWORDHOME 环境变量(根据documentation):

var exec = require('child_process').exec;

var environment = process.env;
environment.ANTIWORDHOME = '/usr/share/antiword';

exec(command, {env:environment}, function(err, stdout, stderr) {
    console.log(stdout);
  });

现在,如果一切正常,您将看到antiword 产生的结果,而不是让我陷入困境的错误。

【讨论】:

  • 这个确实帮助我在 AWS lambda python 上运行 antiword 解决方案。这样做只需设置os.enviorn['ANTIWORDHOME'] = 'path_to_layer_antiword'
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
相关资源
最近更新 更多