Как настроить PATH для виртуального хоста apache, чтобы он включал каталог bin в virtualenv? - PullRequest
2 голосов
/ 25 декабря 2011

Я пытаюсь развернуть свой проект как виртуальный хост и обслуживать его в рамках 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 .

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Вы должны использовать полный путь к необходимому скрипту '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.

0 голосов
/ 25 декабря 2011

Какая у вас версия Apache?

Возможно, это связано с: SetEnv не разрешает переопределение PATH

Кроме того, пожалуйста, опубликуйте свою среду более подробно.Вы используете mod_wsgi, mod_fastcgi?

...