2

我正在尝试将我的项目部署为虚拟主机并在 virtualenv 中提供服务。导入和使用安装在 virtualenv 中的包不是问题。但以下位在服务器上失败:

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'pyscss --output {outfile} {infile}'),
)

我收到以下错误:

Caught FilterError while rendering: /bin/sh: pyscss: not found

我尝试了一些我在网上找到的东西,但都没有奏效。我希望SetEnv

SetEnv PATH /path/to/virtualenv/bin:$PATH

但它不起作用,我的猜测是因为CompilerFilter正在使用subprocess.Popen,但我不确定。

如何避免硬编码 pyscss 可执行文件的路径并将bin目录放在PATH, 但仅针对此虚拟主机

更新:

Apache 版本是2.2.17,mod_wsgi 版本是3.3,virtualenv 版本是1.4.9

4

2 回答 2

1

您应该使用所需“pyscss”脚本的完整路径,即:

/path/to/virtualenv/bin/pyscss

对于非标准程序,依赖于在 PATH 中找到它并不是一个很好的做法。

如果您真的想忽略该建议并依赖 PATH 设置,请在 WSGI 脚本文件中执行以下操作:

import os
os.environ['PATH'] = os.environ['PATH'] + ':/path/to/virtualenv/bin'

SetEnv 指令将不起作用,因为它仅在 WSGI 环境字典中设置每个请求变量,而不处理全局 os.environ。

于 2011-12-26T04:48:33.237 回答
0

你的 Apache 版本是多少?

也许它与:SetEnv 不允许 PATH 覆盖

另外,请更详细地发布您的环境。你在使用 mod_wsgi、mod_fastcgi 吗?

于 2011-12-25T06:39:17.233 回答